diff --git a/exosphere/mariko_fatal/source/fatal_display.cpp b/exosphere/mariko_fatal/source/fatal_display.cpp
index 83cf05740..f315abe2a 100644
--- a/exosphere/mariko_fatal/source/fatal_display.cpp
+++ b/exosphere/mariko_fatal/source/fatal_display.cpp
@@ -221,7 +221,7 @@ namespace ams::secmon::fatal {
                         const int prefix_len = std::strlen(automatic_backups_prefix);
 
                         for (size_t i = 0; i + prefix_len < f_ctx->stack_dump_size; ++i) {
-                            if (std::memcmp(&f_ctx->stack_dump[i], automatic_backups_prefix, prefix_len) == 0) {
+                            if (std::memcmp(f_ctx->stack_dump + i, automatic_backups_prefix, prefix_len) == 0) {
                                 suggestion = "The atmosphere directory may improperly have archive bits set.\n"
                                              "Please try running an archive bit fixer tool (for example, the one in Hekate).\n";
                                 break;
diff --git a/libraries/libmesosphere/source/kern_k_resource_limit.cpp b/libraries/libmesosphere/source/kern_k_resource_limit.cpp
index 0727a1461..22438ad74 100644
--- a/libraries/libmesosphere/source/kern_k_resource_limit.cpp
+++ b/libraries/libmesosphere/source/kern_k_resource_limit.cpp
@@ -182,7 +182,7 @@ namespace ams::kern {
 
             if (m_current_hints[which] + value <= m_limit_values[which] && (timeout < 0 || KHardwareTimer::GetTick() < timeout)) {
                 m_waiter_count++;
-                m_cond_var.Wait(&m_lock, timeout, false);
+                m_cond_var.Wait(std::addressof(m_lock), timeout, false);
                 m_waiter_count--;
 
                 if (GetCurrentThread().IsTerminationRequested()) {
diff --git a/libraries/libmesosphere/source/kern_k_thread.cpp b/libraries/libmesosphere/source/kern_k_thread.cpp
index a457879c6..49519dd2b 100644
--- a/libraries/libmesosphere/source/kern_k_thread.cpp
+++ b/libraries/libmesosphere/source/kern_k_thread.cpp
@@ -39,7 +39,7 @@ namespace ams::kern {
             const uintptr_t stack_bottom = stack_top - PageSize;
 
             KPhysicalAddress stack_paddr = Null<KPhysicalAddress>;
-            MESOSPHERE_ABORT_UNLESS(Kernel::GetKernelPageTable().GetPhysicalAddress(&stack_paddr, stack_bottom));
+            MESOSPHERE_ABORT_UNLESS(Kernel::GetKernelPageTable().GetPhysicalAddress(std::addressof(stack_paddr), stack_bottom));
 
             MESOSPHERE_R_ABORT_UNLESS(Kernel::GetKernelPageTable().UnmapPages(stack_bottom, 1, KMemoryState_Kernel));
 
diff --git a/libraries/libmesosphere/source/kern_k_thread_local_page.cpp b/libraries/libmesosphere/source/kern_k_thread_local_page.cpp
index 9fcfea2c6..9d2105ce5 100644
--- a/libraries/libmesosphere/source/kern_k_thread_local_page.cpp
+++ b/libraries/libmesosphere/source/kern_k_thread_local_page.cpp
@@ -41,7 +41,7 @@ namespace ams::kern {
 
         /* Get the physical address of the page. */
         KPhysicalAddress phys_addr = Null<KPhysicalAddress>;
-        MESOSPHERE_ABORT_UNLESS(m_owner->GetPageTable().GetPhysicalAddress(&phys_addr, this->GetAddress()));
+        MESOSPHERE_ABORT_UNLESS(m_owner->GetPageTable().GetPhysicalAddress(std::addressof(phys_addr), this->GetAddress()));
 
         /* Unmap the page. */
         R_TRY(m_owner->GetPageTable().UnmapPages(this->GetAddress(), 1, KMemoryState_ThreadLocal));
diff --git a/libraries/libstratosphere/Makefile b/libraries/libstratosphere/Makefile
index a01800fc5..c6dfa2e93 100644
--- a/libraries/libstratosphere/Makefile
+++ b/libraries/libstratosphere/Makefile
@@ -129,6 +129,10 @@ hos_stratosphere_api.o: CXXFLAGS += -fno-lto
 init_operator_new.o: CXXFLAGS += -fno-lto
 init_libnx_shim.os.horizon.o: CXXFLAGS += -fno-lto
 
+usb_remote_ds_endpoint.o: CXXFLAGS += -Wno-error=deprecated-declarations
+usb_remote_ds_interface.o: CXXFLAGS += -Wno-error=deprecated-declarations
+usb_remote_ds_service.o: CXXFLAGS += -Wno-error=deprecated-declarations
+
 #---------------------------------------------------------------------------------
 %_bin.h %.bin.o	:	%.bin
 #---------------------------------------------------------------------------------
diff --git a/libraries/libstratosphere/include/stratosphere/cfg/cfg_types.hpp b/libraries/libstratosphere/include/stratosphere/cfg/cfg_types.hpp
index 7df965aff..8c8ee368e 100644
--- a/libraries/libstratosphere/include/stratosphere/cfg/cfg_types.hpp
+++ b/libraries/libstratosphere/include/stratosphere/cfg/cfg_types.hpp
@@ -63,7 +63,7 @@ namespace ams::cfg {
     static_assert(util::is_pod<OverrideStatus>::value, "util::is_pod<OverrideStatus>::value");
 
     constexpr inline bool operator==(const OverrideStatus &lhs, const OverrideStatus &rhs) {
-        return std::memcmp(&lhs, &rhs, sizeof(lhs)) == 0;
+        return std::memcmp(std::addressof(lhs), std::addressof(rhs), sizeof(lhs)) == 0;
     }
 
     constexpr inline bool operator!=(const OverrideStatus &lhs, const OverrideStatus &rhs) {
diff --git a/libraries/libstratosphere/include/stratosphere/fs/fs_remote_filesystem.hpp b/libraries/libstratosphere/include/stratosphere/fs/fs_remote_filesystem.hpp
index 456664470..19e658539 100644
--- a/libraries/libstratosphere/include/stratosphere/fs/fs_remote_filesystem.hpp
+++ b/libraries/libstratosphere/include/stratosphere/fs/fs_remote_filesystem.hpp
@@ -169,7 +169,7 @@ namespace ams::fs {
                 R_TRY(GetPathForServiceObject(std::addressof(sf_path), path));
 
                 FsFile f;
-                R_TRY(fsFsOpenFile(std::addressof(this->base_fs), sf_path.str, mode, &f));
+                R_TRY(fsFsOpenFile(std::addressof(this->base_fs), sf_path.str, mode, std::addressof(f)));
 
                 auto file = std::make_unique<RemoteFile>(f);
                 R_UNLESS(file != nullptr, fs::ResultAllocationFailureInNew());
@@ -183,7 +183,7 @@ namespace ams::fs {
                 R_TRY(GetPathForServiceObject(std::addressof(sf_path), path));
 
                 FsDir d;
-                R_TRY(fsFsOpenDirectory(std::addressof(this->base_fs), sf_path.str, mode, &d));
+                R_TRY(fsFsOpenDirectory(std::addressof(this->base_fs), sf_path.str, mode, std::addressof(d)));
 
                 auto dir = std::make_unique<RemoteDirectory>(d);
                 R_UNLESS(dir != nullptr, fs::ResultAllocationFailureInNew());
diff --git a/libraries/libstratosphere/include/stratosphere/fssystem/fssystem_utility.hpp b/libraries/libstratosphere/include/stratosphere/fssystem/fssystem_utility.hpp
index 1a0d3bf3a..0255d6277 100644
--- a/libraries/libstratosphere/include/stratosphere/fssystem/fssystem_utility.hpp
+++ b/libraries/libstratosphere/include/stratosphere/fssystem/fssystem_utility.hpp
@@ -29,7 +29,7 @@ namespace ams::fssystem {
         Result IterateDirectoryRecursivelyImpl(fs::fsa::IFileSystem *fs, char *work_path, size_t work_path_size, fs::DirectoryEntry *dir_ent, OnEnterDir on_enter_dir, OnExitDir on_exit_dir, OnFile on_file) {
             /* Open the directory. */
             std::unique_ptr<fs::fsa::IDirectory> dir;
-            R_TRY(fs->OpenDirectory(&dir, work_path, fs::OpenDirectoryMode_All));
+            R_TRY(fs->OpenDirectory(std::addressof(dir), work_path, fs::OpenDirectoryMode_All));
 
             const size_t parent_len = strnlen(work_path, work_path_size - 1);
 
@@ -37,7 +37,7 @@ namespace ams::fssystem {
             while (true) {
                 /* Read a single entry. */
                 s64 read_count = 0;
-                R_TRY(dir->Read(&read_count, dir_ent, 1));
+                R_TRY(dir->Read(std::addressof(read_count), dir_ent, 1));
 
                 /* If we're out of entries, we're done. */
                 if (read_count == 0) {
@@ -106,7 +106,7 @@ namespace ams::fssystem {
     Result IterateDirectoryRecursively(fs::fsa::IFileSystem *fs, const char *root_path, OnEnterDir on_enter_dir, OnExitDir on_exit_dir, OnFile on_file) {
         fs::DirectoryEntry dir_entry = {};
         char work_path[fs::EntryNameLengthMax + 1] = {};
-        return IterateDirectoryRecursively(fs, root_path, work_path, sizeof(work_path), &dir_entry, on_enter_dir, on_exit_dir, on_file);
+        return IterateDirectoryRecursively(fs, root_path, work_path, sizeof(work_path), std::addressof(dir_entry), on_enter_dir, on_exit_dir, on_file);
     }
 
     template<typename OnEnterDir, typename OnExitDir, typename OnFile>
diff --git a/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_file_key_value_cache.hpp b/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_file_key_value_cache.hpp
index adcb0113c..1731524d5 100644
--- a/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_file_key_value_cache.hpp
+++ b/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_file_key_value_cache.hpp
@@ -245,8 +245,8 @@ namespace ams::kvdb {
             static Result ValidateExistingCache(const char *dir) {
                 /* Check for existence. */
                 bool has_lru = false, has_kvs = false;
-                R_TRY(FileExists(&has_lru, GetLeastRecentlyUsedListPath(dir)));
-                R_TRY(DirectoryExists(&has_kvs, GetFileKeyValueStorePath(dir)));
+                R_TRY(FileExists(std::addressof(has_lru), GetLeastRecentlyUsedListPath(dir)));
+                R_TRY(DirectoryExists(std::addressof(has_kvs), GetFileKeyValueStorePath(dir)));
 
                 /* If neither exists, CreateNewCache was never called. */
                 R_UNLESS(has_lru || has_kvs, kvdb::ResultNotCreated());
diff --git a/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_file_key_value_store.hpp b/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_file_key_value_store.hpp
index 461193dd6..5ac396272 100644
--- a/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_file_key_value_store.hpp
+++ b/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_file_key_value_store.hpp
@@ -84,38 +84,38 @@ namespace ams::kvdb {
             template<typename Key>
             Result Get(size_t *out_size, void *out_value, size_t max_out_size, const Key &key) {
                 static_assert(util::is_pod<Key>::value && sizeof(Key) <= MaxKeySize, "Invalid FileKeyValueStore Key!");
-                return this->Get(out_size, out_value, max_out_size, &key, sizeof(Key));
+                return this->Get(out_size, out_value, max_out_size, std::addressof(key), sizeof(Key));
             }
 
             template<typename Key, typename Value>
             Result Get(Value *out_value, const Key &key) {
                 static_assert(util::is_pod<Value>::value && !std::is_pointer<Value>::value, "Invalid FileKeyValueStore Value!");
                 size_t size = 0;
-                R_TRY(this->Get(&size, out_value, sizeof(Value), key));
+                R_TRY(this->Get(std::addressof(size), out_value, sizeof(Value), key));
                 AMS_ABORT_UNLESS(size >= sizeof(Value));
                 return ResultSuccess();
             }
 
             template<typename Key>
             Result GetSize(size_t *out_size, const Key &key) {
-                return this->GetSize(out_size, &key, sizeof(Key));
+                return this->GetSize(out_size, std::addressof(key), sizeof(Key));
             }
 
             template<typename Key>
             Result Set(const Key &key, const void *value, size_t value_size) {
                 static_assert(util::is_pod<Key>::value && sizeof(Key) <= MaxKeySize, "Invalid FileKeyValueStore Key!");
-                return this->Set(&key, sizeof(Key), value, value_size);
+                return this->Set(std::addressof(key), sizeof(Key), value, value_size);
             }
 
             template<typename Key, typename Value>
             Result Set(const Key &key, const Value &value) {
                 static_assert(util::is_pod<Value>::value && !std::is_pointer<Value>::value, "Invalid FileKeyValueStore Value!");
-                return this->Set(key, &value, sizeof(Value));
+                return this->Set(key, std::addressof(value), sizeof(Value));
             }
 
             template<typename Key>
             Result Remove(const Key &key) {
-                return this->Remove(&key, sizeof(Key));
+                return this->Remove(std::addressof(key), sizeof(Key));
             }
     };
 
diff --git a/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_memory_key_value_store.hpp b/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_memory_key_value_store.hpp
index 6393eca50..2bce9b83c 100644
--- a/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_memory_key_value_store.hpp
+++ b/libraries/libstratosphere/include/stratosphere/kvdb/kvdb_memory_key_value_store.hpp
@@ -306,7 +306,7 @@ namespace ams::kvdb {
                 /* Try to read the archive -- note, path not found is a success condition. */
                 /* This is because no archive file = no entries, so we're in the right state. */
                 AutoBuffer buffer;
-                R_TRY_CATCH(this->ReadArchiveFile(&buffer)) {
+                R_TRY_CATCH(this->ReadArchiveFile(std::addressof(buffer))) {
                     R_CONVERT(fs::ResultPathNotFound, ResultSuccess());
                 } R_END_TRY_CATCH;
 
@@ -315,12 +315,12 @@ namespace ams::kvdb {
                     ArchiveReader reader(buffer);
 
                     size_t entry_count = 0;
-                    R_TRY(reader.ReadEntryCount(&entry_count));
+                    R_TRY(reader.ReadEntryCount(std::addressof(entry_count)));
 
                     for (size_t i = 0; i < entry_count; i++) {
                         /* Get size of key/value. */
                         size_t key_size = 0, value_size = 0;
-                        R_TRY(reader.GetEntrySize(&key_size, &value_size));
+                        R_TRY(reader.GetEntrySize(std::addressof(key_size), std::addressof(value_size)));
 
                         /* Allocate memory for value. */
                         void *new_value = this->memory_resource->Allocate(value_size);
@@ -329,7 +329,7 @@ namespace ams::kvdb {
 
                         /* Read key and value. */
                         Key key;
-                        R_TRY(reader.ReadEntry(&key, sizeof(key), new_value, value_size));
+                        R_TRY(reader.ReadEntry(std::addressof(key), sizeof(key), new_value, value_size));
                         R_TRY(this->index.AddUnsafe(key, new_value, value_size));
 
                         /* We succeeded, so cancel the value guard to prevent deallocation. */
@@ -351,7 +351,7 @@ namespace ams::kvdb {
                     writer.WriteHeader(this->GetCount());
                     for (const auto &it : this->index) {
                         const auto &key = it.GetKey();
-                        writer.WriteEntry(&key, sizeof(Key), it.GetValuePointer(), it.GetValueSize());
+                        writer.WriteEntry(std::addressof(key), sizeof(Key), it.GetValuePointer(), it.GetValueSize());
                     }
                 }
 
@@ -367,7 +367,7 @@ namespace ams::kvdb {
             Result Set(const Key &key, const Value &value) {
                 /* Only allow setting pod. */
                 static_assert(util::is_pod<Value>::value, "KeyValueStore Values must be pod");
-                return this->Set(key, &value, sizeof(Value));
+                return this->Set(key, std::addressof(value), sizeof(Value));
             }
 
             template<typename Value>
diff --git a/libraries/libstratosphere/include/stratosphere/ncm/ncm_rights_id_cache.hpp b/libraries/libstratosphere/include/stratosphere/ncm/ncm_rights_id_cache.hpp
index b137818e0..381789b1b 100644
--- a/libraries/libstratosphere/include/stratosphere/ncm/ncm_rights_id_cache.hpp
+++ b/libraries/libstratosphere/include/stratosphere/ncm/ncm_rights_id_cache.hpp
@@ -50,11 +50,11 @@ namespace ams::ncm {
 
             void Store(ContentId content_id, ncm::RightsId rights_id) {
                 std::scoped_lock lk(this->mutex);
-                Entry *eviction_candidate = &this->entries[0];
+                Entry *eviction_candidate = std::addressof(this->entries[0]);
 
                 /* Find a suitable existing entry to store our new one at. */
                 for (size_t i = 1; i < MaxEntries; i++) {
-                    Entry *entry = &this->entries[i];
+                    Entry *entry = std::addressof(this->entries[i]);
 
                     /* Change eviction candidates if the uuid already matches ours, or if the uuid doesn't already match and the last_accessed count is lower */
                     if (content_id == entry->uuid || (content_id != eviction_candidate->uuid && entry->last_accessed < eviction_candidate->last_accessed)) {
@@ -73,7 +73,7 @@ namespace ams::ncm {
 
                 /* Attempt to locate the content id in the cache. */
                 for (size_t i = 0; i < MaxEntries; i++) {
-                    Entry *entry = &this->entries[i];
+                    Entry *entry = std::addressof(this->entries[i]);
 
                     if (entry->last_accessed != 1 && content_id == entry->uuid) {
                         entry->last_accessed = this->counter;
diff --git a/libraries/libstratosphere/include/stratosphere/rapidjson.hpp b/libraries/libstratosphere/include/stratosphere/rapidjson.hpp
index 6d000e29a..ddd30b9a0 100644
--- a/libraries/libstratosphere/include/stratosphere/rapidjson.hpp
+++ b/libraries/libstratosphere/include/stratosphere/rapidjson.hpp
@@ -26,4 +26,4 @@
 
 #include <stratosphere/rapidjson/rapidjson.h>
 #include <stratosphere/rapidjson/encodings.h>
-#include <stratosphere/rapidjson/reader.h>
\ No newline at end of file
+#include <stratosphere/rapidjson/reader.h>
diff --git a/libraries/libstratosphere/include/stratosphere/ro/ro_types.hpp b/libraries/libstratosphere/include/stratosphere/ro/ro_types.hpp
index 45b26a14f..057258c97 100644
--- a/libraries/libstratosphere/include/stratosphere/ro/ro_types.hpp
+++ b/libraries/libstratosphere/include/stratosphere/ro/ro_types.hpp
@@ -190,7 +190,7 @@ namespace ams::ro {
             }
 
             const ModuleId *GetModuleId() const {
-                return &this->module_id;
+                return std::addressof(this->module_id);
             }
     };
     static_assert(sizeof(NroHeader) == 0x80, "NroHeader definition!");
diff --git a/libraries/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_domain_service_object.hpp b/libraries/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_domain_service_object.hpp
index 548974954..120d84997 100644
--- a/libraries/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_domain_service_object.hpp
+++ b/libraries/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_domain_service_object.hpp
@@ -116,7 +116,7 @@ namespace ams::sf::cmif {
         using DispatchTableType = DomainServiceObjectDispatchTable;
         static constexpr ProcessHandlerType ProcessHandlerImpl = &impl::ServiceDispatchTableBase::ProcessMessage<DispatchTableType>;
 
-        static constexpr inline ServiceDispatchMeta Meta{&DomainServiceObject::s_CmifServiceDispatchTable, ProcessHandlerImpl};
+        static constexpr inline ServiceDispatchMeta Meta{std::addressof(DomainServiceObject::s_CmifServiceDispatchTable), ProcessHandlerImpl};
     };
 
     template<>
@@ -127,7 +127,7 @@ namespace ams::sf::cmif {
         using DispatchTableType = DomainServiceObjectDispatchTable;
         static constexpr ProcessHandlerType ProcessHandlerImpl = &impl::ServiceDispatchTableBase::ProcessMessageForMitm<DispatchTableType>;
 
-        static constexpr inline ServiceDispatchMeta Meta{&DomainServiceObject::s_CmifServiceDispatchTable, ProcessHandlerImpl};
+        static constexpr inline ServiceDispatchMeta Meta{std::addressof(DomainServiceObject::s_CmifServiceDispatchTable), ProcessHandlerImpl};
     };
 
 
diff --git a/libraries/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_service_dispatch.hpp b/libraries/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_service_dispatch.hpp
index 7161174c5..cf0408ab8 100644
--- a/libraries/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_service_dispatch.hpp
+++ b/libraries/libstratosphere/include/stratosphere/sf/cmif/sf_cmif_service_dispatch.hpp
@@ -136,7 +136,7 @@ namespace ams::sf::cmif {
         static constexpr ProcessHandlerType ProcessHandlerImpl = sf::IsMitmServiceObject<T> ? (&impl::ServiceDispatchTableBase::ProcessMessageForMitm<DispatchTableType>)
                                                                                             : (&impl::ServiceDispatchTableBase::ProcessMessage<DispatchTableType>);
 
-        static constexpr inline ServiceDispatchMeta Meta{&DispatchTable, ProcessHandlerImpl};
+        static constexpr inline ServiceDispatchMeta Meta{std::addressof(DispatchTable), ProcessHandlerImpl};
     };
 
     template<>
@@ -151,7 +151,7 @@ namespace ams::sf::cmif {
 
     template<typename T>
     constexpr ALWAYS_INLINE const ServiceDispatchMeta *GetServiceDispatchMeta() {
-        return &ServiceDispatchTraits<T>::Meta;
+        return std::addressof(ServiceDispatchTraits<T>::Meta);
     }
 
 }
diff --git a/libraries/libstratosphere/include/stratosphere/sf/impl/sf_impl_command_serialization.hpp b/libraries/libstratosphere/include/stratosphere/sf/impl/sf_impl_command_serialization.hpp
index 5659fefba..eeeb21a90 100644
--- a/libraries/libstratosphere/include/stratosphere/sf/impl/sf_impl_command_serialization.hpp
+++ b/libraries/libstratosphere/include/stratosphere/sf/impl/sf_impl_command_serialization.hpp
@@ -760,7 +760,7 @@ namespace ams::sf::impl {
             template<size_t Index, typename Interface>
             Out<SharedPointer<Interface>> GetOutObject() {
                 auto sp = std::construct_at(GetOutObjectSharedPointer<Index, Interface>());
-                return Out<SharedPointer<Interface>>(sp, this->out_object_ids + Index);
+                return Out<SharedPointer<Interface>>(sp, std::addressof(this->out_object_ids[Index]));
             }
 
             template<size_t Index, typename Interface>
@@ -869,7 +869,7 @@ namespace ams::sf::impl {
                     return;
                 }
                 os::NativeHandle server_handle, client_handle;
-                R_ABORT_UNLESS(sf::hipc::CreateSession(&server_handle, &client_handle));
+                R_ABORT_UNLESS(sf::hipc::CreateSession(std::addressof(server_handle), std::addressof(client_handle)));
                 R_ABORT_UNLESS(manager->RegisterSession(server_handle, std::move(object)));
                 response.move_handles[Index] = client_handle;
             }
@@ -1137,10 +1137,10 @@ namespace ams::sf::impl {
         ImplProcessorType impl_processor;
         if (ctx.processor == nullptr) {
             /* In the non-domain case, this is our only processor. */
-            ctx.processor = &impl_processor;
+            ctx.processor = std::addressof(impl_processor);
         } else {
             /* In the domain case, we already have a processor, so we should give it a pointer to our template implementation. */
-            ctx.processor->SetImplementationProcessor(&impl_processor);
+            ctx.processor->SetImplementationProcessor(std::addressof(impl_processor));
         }
 
         /* Validate the metadata has the expected counts. */
diff --git a/libraries/libstratosphere/include/stratosphere/sm/sm_types.hpp b/libraries/libstratosphere/include/stratosphere/sm/sm_types.hpp
index ddbc260af..f91546371 100644
--- a/libraries/libstratosphere/include/stratosphere/sm/sm_types.hpp
+++ b/libraries/libstratosphere/include/stratosphere/sm/sm_types.hpp
@@ -50,7 +50,7 @@ namespace ams::sm {
     static_assert(alignof(ServiceName) == 1, "ServiceName definition!");
 
     inline bool operator==(const ServiceName &lhs, const ServiceName &rhs) {
-        return std::memcmp(&lhs, &rhs, sizeof(ServiceName)) == 0;
+        return std::memcmp(std::addressof(lhs), std::addressof(rhs), sizeof(ServiceName)) == 0;
     }
 
     inline bool operator!=(const ServiceName &lhs, const ServiceName &rhs) {
diff --git a/libraries/libstratosphere/source/ams/ams_emummc_api.cpp b/libraries/libstratosphere/source/ams/ams_emummc_api.cpp
index 1ee2626d9..0258c0567 100644
--- a/libraries/libstratosphere/source/ams/ams_emummc_api.cpp
+++ b/libraries/libstratosphere/source/ams/ams_emummc_api.cpp
@@ -78,10 +78,10 @@ namespace ams::emummc {
                 struct {
                     char file_path[MaxDirLen + 1];
                     char nintendo_path[MaxDirLen + 1];
-                } *paths = reinterpret_cast<decltype(paths)>(&path_storage);
+                } *paths = reinterpret_cast<decltype(paths)>(std::addressof(path_storage));
 
                 /* Retrieve paths from secure monitor. */
-                AMS_ABORT_UNLESS(spl::smc::AtmosphereGetEmummcConfig(&g_exo_config, paths, 0) == spl::smc::Result::Success);
+                AMS_ABORT_UNLESS(spl::smc::AtmosphereGetEmummcConfig(std::addressof(g_exo_config), paths, 0) == spl::smc::Result::Success);
 
                 const Storage storage = static_cast<Storage>(g_exo_config.base_cfg.type);
                 g_is_emummc = g_exo_config.base_cfg.magic == StorageMagic && storage != Storage_Emmc;
diff --git a/libraries/libstratosphere/source/ams/ams_environment.cpp b/libraries/libstratosphere/source/ams/ams_environment.cpp
index 7cbb5be88..eba47ec33 100644
--- a/libraries/libstratosphere/source/ams/ams_environment.cpp
+++ b/libraries/libstratosphere/source/ams/ams_environment.cpp
@@ -113,7 +113,7 @@ namespace ams {
                 svc::lp64::MemoryInfo mem_info;
                 svc::PageInfo page_info;
                 if (R_SUCCEEDED(svc::QueryMemory(std::addressof(mem_info), std::addressof(page_info), cur_fp)) && (mem_info.permission & svc::MemoryPermission_Read) == svc::MemoryPermission_Read) {
-                    std::memcpy(&cur_frame, reinterpret_cast<void *>(cur_fp), sizeof(cur_frame));
+                    std::memcpy(std::addressof(cur_frame), reinterpret_cast<void *>(cur_fp), sizeof(cur_frame));
                 } else {
                     break;
                 }
@@ -145,7 +145,7 @@ namespace ams {
         }
 
         /* Just call the user exception handler. */
-        ::ams::ExceptionHandler(&ams_ctx);
+        ::ams::ExceptionHandler(std::addressof(ams_ctx));
     }
 
     NORETURN void AbortImpl();
diff --git a/libraries/libstratosphere/source/ams/ams_exosphere_api.cpp b/libraries/libstratosphere/source/ams/ams_exosphere_api.cpp
index 2998f9902..9df6fdfe2 100644
--- a/libraries/libstratosphere/source/ams/ams_exosphere_api.cpp
+++ b/libraries/libstratosphere/source/ams/ams_exosphere_api.cpp
@@ -21,7 +21,7 @@ namespace ams::exosphere {
 
     ApiInfo GetApiInfo() {
         u64 exosphere_cfg;
-        if (spl::smc::GetConfig(&exosphere_cfg, 1, spl::ConfigItem::ExosphereApiVersion) != spl::smc::Result::Success) {
+        if (spl::smc::GetConfig(std::addressof(exosphere_cfg), 1, spl::ConfigItem::ExosphereApiVersion) != spl::smc::Result::Success) {
             R_ABORT_UNLESS(ResultNotPresent());
         }
 
diff --git a/libraries/libstratosphere/source/boot2/boot2_api.cpp b/libraries/libstratosphere/source/boot2/boot2_api.cpp
index eea1c0558..17c90292a 100644
--- a/libraries/libstratosphere/source/boot2/boot2_api.cpp
+++ b/libraries/libstratosphere/source/boot2/boot2_api.cpp
@@ -143,7 +143,7 @@ namespace ams::boot2 {
             if (IsAllowedLaunchProgram(loc)) {
                 /* Launch, lightly validate result. */
                 {
-                    const auto launch_result = pm::shell::LaunchProgram(&process_id, loc, launch_flags);
+                    const auto launch_result = pm::shell::LaunchProgram(std::addressof(process_id), loc, launch_flags);
                     AMS_ABORT_UNLESS(!(svc::ResultOutOfResource::Includes(launch_result)));
                     AMS_ABORT_UNLESS(!(svc::ResultOutOfMemory::Includes(launch_result)));
                     AMS_ABORT_UNLESS(!(svc::ResultLimitReached::Includes(launch_result)));
@@ -178,13 +178,13 @@ namespace ams::boot2 {
 
         bool IsForceMaintenance() {
             u8 force_maintenance = 1;
-            settings::fwdbg::GetSettingsItemValue(&force_maintenance, sizeof(force_maintenance), "boot", "force_maintenance");
+            settings::fwdbg::GetSettingsItemValue(std::addressof(force_maintenance), sizeof(force_maintenance), "boot", "force_maintenance");
             return force_maintenance != 0;
         }
 
         bool IsHtcEnabled() {
             u8 enable_htc = 0;
-            settings::fwdbg::GetSettingsItemValue(&enable_htc, sizeof(enable_htc), "atmosphere", "enable_htc");
+            settings::fwdbg::GetSettingsItemValue(std::addressof(enable_htc), sizeof(enable_htc), "atmosphere", "enable_htc");
             return enable_htc != 0;
         }
 
@@ -195,7 +195,7 @@ namespace ams::boot2 {
             }
 
             u8 enable_ams_lm = 0;
-            settings::fwdbg::GetSettingsItemValue(&enable_ams_lm, sizeof(enable_ams_lm), "atmosphere", "enable_log_manager");
+            settings::fwdbg::GetSettingsItemValue(std::addressof(enable_ams_lm), sizeof(enable_ams_lm), "atmosphere", "enable_log_manager");
             return enable_ams_lm != 0;
         }
 
@@ -215,7 +215,7 @@ namespace ams::boot2 {
         void IterateOverFlaggedProgramsOnSdCard(F f) {
             /* Validate that the contents directory exists. */
             fs::DirectoryHandle contents_dir;
-            if (R_FAILED(fs::OpenDirectory(&contents_dir, "sdmc:/atmosphere/contents", fs::OpenDirectoryMode_Directory))) {
+            if (R_FAILED(fs::OpenDirectory(std::addressof(contents_dir), "sdmc:/atmosphere/contents", fs::OpenDirectoryMode_Directory))) {
                 return;
             }
             ON_SCOPE_EXIT { fs::CloseDirectory(contents_dir); };
@@ -223,7 +223,7 @@ namespace ams::boot2 {
             /* Iterate over entries in the contents directory */
             fs::DirectoryEntry entry;
             s64 count;
-            while (R_SUCCEEDED(fs::ReadDirectory(&count, &entry, contents_dir, 1)) && count == 1) {
+            while (R_SUCCEEDED(fs::ReadDirectory(std::addressof(count), std::addressof(entry), contents_dir, 1)) && count == 1) {
                 /* Check that the subdirectory can be converted to a program id. */
                 if (std::strlen(entry.name) == 2 * sizeof(ncm::ProgramId) && IsHexadecimal(entry.name)) {
                     /* Check if we've already launched the program. */
@@ -252,12 +252,12 @@ namespace ams::boot2 {
                     util::SNPrintf(path, sizeof(path), "sdmc:/atmosphere/contents/%016lx/mitm.lst", static_cast<u64>(program_id));
 
                     fs::FileHandle f;
-                    if (R_FAILED(fs::OpenFile(&f, path, fs::OpenMode_Read))) {
+                    if (R_FAILED(fs::OpenFile(std::addressof(f), path, fs::OpenMode_Read))) {
                         return;
                     }
                     ON_SCOPE_EXIT { fs::CloseFile(f); };
 
-                    R_ABORT_UNLESS(fs::ReadFile(&mitm_list_size, f, 0, mitm_list, sizeof(mitm_list)));
+                    R_ABORT_UNLESS(fs::ReadFile(std::addressof(mitm_list_size), f, 0, mitm_list, sizeof(mitm_list)));
                 }
 
                 /* Validate read size. */
@@ -352,7 +352,7 @@ namespace ams::boot2 {
 
                 /* Retrieve setting from the database. */
                 u8 force_maintenance = 0;
-                settings::fwdbg::GetSettingsItemValue(&force_maintenance, sizeof(force_maintenance), "boot", "force_maintenance");
+                settings::fwdbg::GetSettingsItemValue(std::addressof(force_maintenance), sizeof(force_maintenance), "boot", "force_maintenance");
             }
 
             /* Launch pcv. */
diff --git a/libraries/libstratosphere/source/capsrv/server/jpeg/decodersrv_software_jpeg_decoder.cpp b/libraries/libstratosphere/source/capsrv/server/jpeg/decodersrv_software_jpeg_decoder.cpp
index 67ee272ba..3631a3643 100644
--- a/libraries/libstratosphere/source/capsrv/server/jpeg/decodersrv_software_jpeg_decoder.cpp
+++ b/libraries/libstratosphere/source/capsrv/server/jpeg/decodersrv_software_jpeg_decoder.cpp
@@ -121,7 +121,7 @@ namespace ams::capsrv::server::jpeg {
             cinfo.do_block_smoothing    = input.block_smoothing;
 
             /* Start decompression. */
-            R_UNLESS(jpeg_start_decompress(&cinfo) == TRUE, capsrv::ResultAlbumInvalidFileData());
+            R_UNLESS(jpeg_start_decompress(std::addressof(cinfo)) == TRUE, capsrv::ResultAlbumInvalidFileData());
 
             /* Check the parameters. */
             CAPSRV_ASSERT(cinfo.output_width         == input.width);
@@ -169,7 +169,7 @@ namespace ams::capsrv::server::jpeg {
             }
 
             /* Finish the decompression. */
-            R_UNLESS(jpeg_finish_decompress(&cinfo) == TRUE, capsrv::ResultAlbumInvalidFileData());
+            R_UNLESS(jpeg_finish_decompress(std::addressof(cinfo)) == TRUE, capsrv::ResultAlbumInvalidFileData());
         } else {
             /* Some unknown error was caught by our handler. */
             return capsrv::ResultAlbumInvalidFileData();
diff --git a/libraries/libstratosphere/source/cfg/cfg_override.cpp b/libraries/libstratosphere/source/cfg/cfg_override.cpp
index 2451074cb..54629ff54 100644
--- a/libraries/libstratosphere/source/cfg/cfg_override.cpp
+++ b/libraries/libstratosphere/source/cfg/cfg_override.cpp
@@ -373,9 +373,9 @@ namespace ams::cfg {
                 .override_key = g_default_override_key,
                 .cheat_enable_key = g_default_cheat_enable_key,
             };
-            std::memset(&config.locale, 0xCC, sizeof(config.locale));
+            std::memset(std::addressof(config.locale), 0xCC, sizeof(config.locale));
 
-            ParseIniFile(ContentSpecificIniHandler, path, &config);
+            ParseIniFile(ContentSpecificIniHandler, path, std::addressof(config));
             return config;
         }
 
@@ -399,7 +399,7 @@ namespace ams::cfg {
         RefreshOverrideConfiguration();
 
         /* If we can't read the key state, don't override anything. */
-        if (R_FAILED(hid::GetKeysHeld(&status.keys_held))) {
+        if (R_FAILED(hid::GetKeysHeld(std::addressof(status.keys_held)))) {
             return status;
         }
 
diff --git a/libraries/libstratosphere/source/cfg/cfg_sd_card.cpp b/libraries/libstratosphere/source/cfg/cfg_sd_card.cpp
index e00908e62..999f524f0 100644
--- a/libraries/libstratosphere/source/cfg/cfg_sd_card.cpp
+++ b/libraries/libstratosphere/source/cfg/cfg_sd_card.cpp
@@ -37,7 +37,7 @@ namespace ams::cfg {
         Result CheckSdCardServicesReady() {
             for (size_t i = 0; i < NumRequiredServicesForSdCardAccess; i++) {
                 bool service_present = false;
-                R_TRY(sm::HasService(&service_present, RequiredServicesForSdCardAccess[i]));
+                R_TRY(sm::HasService(std::addressof(service_present), RequiredServicesForSdCardAccess[i]));
                 if (!service_present) {
                     return fs::ResultSdCardNotPresent();
                 }
@@ -54,14 +54,14 @@ namespace ams::cfg {
 
         Result TryInitializeSdCard() {
             R_TRY(CheckSdCardServicesReady());
-            R_ABORT_UNLESS(fsOpenSdCardFileSystem(&g_sd_card_filesystem));
+            R_ABORT_UNLESS(fsOpenSdCardFileSystem(std::addressof(g_sd_card_filesystem)));
             g_sd_card_initialized = true;
             return ResultSuccess();
         }
 
         void InitializeSdCard() {
             WaitSdCardServicesReadyImpl();
-            R_ABORT_UNLESS(fsOpenSdCardFileSystem(&g_sd_card_filesystem));
+            R_ABORT_UNLESS(fsOpenSdCardFileSystem(std::addressof(g_sd_card_filesystem)));
             g_sd_card_initialized = true;
         }
 
diff --git a/libraries/libstratosphere/source/fssrv/fssrv_filesystem_interface_adapter.cpp b/libraries/libstratosphere/source/fssrv/fssrv_filesystem_interface_adapter.cpp
index 58224e803..51880abab 100644
--- a/libraries/libstratosphere/source/fssrv/fssrv_filesystem_interface_adapter.cpp
+++ b/libraries/libstratosphere/source/fssrv/fssrv_filesystem_interface_adapter.cpp
@@ -42,7 +42,7 @@ namespace ams::fssrv::impl {
         R_UNLESS(size >= 0,   fs::ResultInvalidSize());
 
         size_t read_size = 0;
-        R_TRY(this->base_file->Read(&read_size, offset, buffer.GetPointer(), static_cast<size_t>(size), option));
+        R_TRY(this->base_file->Read(std::addressof(read_size), offset, buffer.GetPointer(), static_cast<size_t>(size), option));
 
         out.SetValue(read_size);
         return ResultSuccess();
@@ -82,7 +82,7 @@ namespace ams::fssrv::impl {
             auto read_lock = this->parent_filesystem->AcquireCacheInvalidationReadLock();
 
             fs::FileQueryRangeInfo info;
-            R_TRY(this->base_file->OperateRange(&info, sizeof(info), fs::OperationId::QueryRange, offset, size, nullptr, 0));
+            R_TRY(this->base_file->OperateRange(std::addressof(info), sizeof(info), fs::OperationId::QueryRange, offset, size, nullptr, 0));
             out->Merge(info);
         }
 
@@ -268,7 +268,7 @@ namespace ams::fssrv::impl {
 
         /* TODO: N retries on fs::ResultDataCorrupted, we may want to eventually. */
         std::unique_ptr<fs::fsa::IFile> file;
-        R_TRY(this->base_fs->OpenFile(&file, normalizer.GetPath(), static_cast<fs::OpenMode>(mode)));
+        R_TRY(this->base_fs->OpenFile(std::addressof(file), normalizer.GetPath(), static_cast<fs::OpenMode>(mode)));
 
         /* TODO: This is a hack to get the mitm API to work. Better solution? */
         const auto target_object_id = file->GetDomainObjectId();
@@ -296,7 +296,7 @@ namespace ams::fssrv::impl {
 
         /* TODO: N retries on fs::ResultDataCorrupted, we may want to eventually. */
         std::unique_ptr<fs::fsa::IDirectory> dir;
-        R_TRY(this->base_fs->OpenDirectory(&dir, normalizer.GetPath(), static_cast<fs::OpenDirectoryMode>(mode)));
+        R_TRY(this->base_fs->OpenDirectory(std::addressof(dir), normalizer.GetPath(), static_cast<fs::OpenDirectoryMode>(mode)));
 
         /* TODO: This is a hack to get the mitm API to work. Better solution? */
         const auto target_object_id = dir->GetDomainObjectId();
diff --git a/libraries/libstratosphere/source/fssrv/fssrv_storage_interface_adapter.cpp b/libraries/libstratosphere/source/fssrv/fssrv_storage_interface_adapter.cpp
index c56488575..5e757162d 100644
--- a/libraries/libstratosphere/source/fssrv/fssrv_storage_interface_adapter.cpp
+++ b/libraries/libstratosphere/source/fssrv/fssrv_storage_interface_adapter.cpp
@@ -84,7 +84,7 @@ namespace ams::fssrv::impl {
             auto read_lock = this->AcquireCacheInvalidationReadLock();
 
             fs::StorageQueryRangeInfo info;
-            R_TRY(this->base_storage->OperateRange(&info, sizeof(info), fs::OperationId::QueryRange, offset, size, nullptr, 0));
+            R_TRY(this->base_storage->OperateRange(std::addressof(info), sizeof(info), fs::OperationId::QueryRange, offset, size, nullptr, 0));
             out->Merge(info);
         }
 
diff --git a/libraries/libstratosphere/source/fssystem/fssystem_directory_savedata_filesystem.cpp b/libraries/libstratosphere/source/fssystem/fssystem_directory_savedata_filesystem.cpp
index ff78c0992..7a1d8a3b0 100644
--- a/libraries/libstratosphere/source/fssystem/fssystem_directory_savedata_filesystem.cpp
+++ b/libraries/libstratosphere/source/fssystem/fssystem_directory_savedata_filesystem.cpp
@@ -96,7 +96,7 @@ namespace ams::fssystem {
         fs::DirectoryEntryType type;
 
         /* Check that the working directory exists. */
-        R_TRY_CATCH(this->base_fs->GetEntryType(&type, WorkingDirectoryPath)) {
+        R_TRY_CATCH(this->base_fs->GetEntryType(std::addressof(type), WorkingDirectoryPath)) {
             /* If path isn't found, create working directory and committed directory. */
             R_CATCH(fs::ResultPathNotFound) {
                 R_TRY(this->base_fs->CreateDirectory(WorkingDirectoryPath));
@@ -105,7 +105,7 @@ namespace ams::fssystem {
         } R_END_TRY_CATCH;
 
         /* Now check for the committed directory. */
-        R_TRY_CATCH(this->base_fs->GetEntryType(&type, CommittedDirectoryPath)) {
+        R_TRY_CATCH(this->base_fs->GetEntryType(std::addressof(type), CommittedDirectoryPath)) {
             /* Committed doesn't exist, so synchronize and rename. */
             R_CATCH(fs::ResultPathNotFound) {
                 R_TRY(this->SynchronizeDirectory(SynchronizingDirectoryPath, WorkingDirectoryPath));
@@ -148,7 +148,7 @@ namespace ams::fssystem {
         /* Get a work buffer to work with. */
         std::unique_ptr<u8[]> work_buf;
         size_t work_buf_size;
-        R_TRY(this->AllocateWorkBuffer(&work_buf, &work_buf_size, IdealWorkBufferSize));
+        R_TRY(this->AllocateWorkBuffer(std::addressof(work_buf), std::addressof(work_buf_size), IdealWorkBufferSize));
 
         /* Copy the directory recursively. */
         return fssystem::CopyDirectoryRecursively(this->base_fs, dst, src, work_buf.get(), work_buf_size);
@@ -165,7 +165,7 @@ namespace ams::fssystem {
         /* Normalize it. */
         constexpr size_t WorkingDirectoryPathLength = sizeof(WorkingDirectoryPath) - 1;
         size_t normalized_length;
-        return fs::PathNormalizer::Normalize(out + WorkingDirectoryPathLength - 1, &normalized_length, relative_path, out_size - (WorkingDirectoryPathLength - 1));
+        return fs::PathNormalizer::Normalize(out + WorkingDirectoryPathLength - 1, std::addressof(normalized_length), relative_path, out_size - (WorkingDirectoryPathLength - 1));
     }
 
     void DirectorySaveDataFileSystem::OnWritableFileClose() {
@@ -183,7 +183,7 @@ namespace ams::fssystem {
         /* Get a work buffer to work with. */
         std::unique_ptr<u8[]> work_buf;
         size_t work_buf_size;
-        R_TRY(this->AllocateWorkBuffer(&work_buf, &work_buf_size, IdealWorkBufferSize));
+        R_TRY(this->AllocateWorkBuffer(std::addressof(work_buf), std::addressof(work_buf_size), IdealWorkBufferSize));
 
         /* Copy the directory recursively. */
         R_TRY(fssystem::CopyDirectoryRecursively(this->base_fs, save_fs, fs::PathNormalizer::RootPath, fs::PathNormalizer::RootPath, work_buf.get(), work_buf_size));
@@ -198,7 +198,7 @@ namespace ams::fssystem {
 
         std::scoped_lock lk(this->accessor_mutex);
         std::unique_ptr<fs::fsa::IFile> base_file;
-        R_TRY(this->base_fs->OpenFile(&base_file, full_path, mode));
+        R_TRY(this->base_fs->OpenFile(std::addressof(base_file), full_path, mode));
 
         std::unique_ptr<DirectorySaveDataFile> file(new (std::nothrow) DirectorySaveDataFile(std::move(base_file), this, mode));
         R_UNLESS(file != nullptr, fs::ResultAllocationFailureInDirectorySaveDataFileSystem());
diff --git a/libraries/libstratosphere/source/fssystem/fssystem_utility.cpp b/libraries/libstratosphere/source/fssystem/fssystem_utility.cpp
index 78a896fa2..0b91df0a6 100644
--- a/libraries/libstratosphere/source/fssystem/fssystem_utility.cpp
+++ b/libraries/libstratosphere/source/fssystem/fssystem_utility.cpp
@@ -72,7 +72,7 @@ namespace ams::fssystem {
     Result CopyFile(fs::fsa::IFileSystem *dst_fs, fs::fsa::IFileSystem *src_fs, const char *dst_parent_path, const char *src_path, const fs::DirectoryEntry *entry, void *work_buf, size_t work_buf_size) {
         /* Open source file. */
         std::unique_ptr<fs::fsa::IFile> src_file;
-        R_TRY(src_fs->OpenFile(&src_file, src_path, fs::OpenMode_Read));
+        R_TRY(src_fs->OpenFile(std::addressof(src_file), src_path, fs::OpenMode_Read));
 
         /* Open dst file. */
         std::unique_ptr<fs::fsa::IFile> dst_file;
@@ -83,7 +83,7 @@ namespace ams::fssystem {
             AMS_ABORT_UNLESS(original_size < sizeof(dst_path));
 
             R_TRY(dst_fs->CreateFile(dst_path, entry->file_size));
-            R_TRY(dst_fs->OpenFile(&dst_file, dst_path, fs::OpenMode_Write));
+            R_TRY(dst_fs->OpenFile(std::addressof(dst_file), dst_path, fs::OpenMode_Write));
         }
 
         /* Read/Write file in work buffer sized chunks. */
@@ -91,7 +91,7 @@ namespace ams::fssystem {
         s64 offset = 0;
         while (remaining > 0) {
             size_t read_size;
-            R_TRY(src_file->Read(&read_size, offset, work_buf, work_buf_size, fs::ReadOption()));
+            R_TRY(src_file->Read(std::addressof(read_size), offset, work_buf, work_buf_size, fs::ReadOption()));
             R_TRY(dst_file->Write(offset, work_buf, read_size, fs::WriteOption()));
 
             remaining -= read_size;
@@ -132,7 +132,7 @@ namespace ams::fssystem {
                 return ResultSuccess();
             },
             [&](const char *path, const fs::DirectoryEntry &entry) -> Result { /* On File */
-                return CopyFile(dst_fs, src_fs, dst_path_buf, path, &entry, work_buf, work_buf_size);
+                return CopyFile(dst_fs, src_fs, dst_path_buf, path, std::addressof(entry), work_buf, work_buf_size);
             }
         );
     }
diff --git a/libraries/libstratosphere/source/kvdb/kvdb_archive.cpp b/libraries/libstratosphere/source/kvdb/kvdb_archive.cpp
index de61a4a3d..d4e3df298 100644
--- a/libraries/libstratosphere/source/kvdb/kvdb_archive.cpp
+++ b/libraries/libstratosphere/source/kvdb/kvdb_archive.cpp
@@ -87,7 +87,7 @@ namespace ams::kvdb {
 
         /* Read and validate header. */
         ArchiveHeader header;
-        R_TRY(this->Read(&header, sizeof(header)));
+        R_TRY(this->Read(std::addressof(header), sizeof(header)));
         R_TRY(header.Validate());
 
         *out = header.entry_count;
@@ -100,7 +100,7 @@ namespace ams::kvdb {
 
         /* Peek the next entry header. */
         ArchiveEntryHeader header;
-        R_TRY(this->Peek(&header, sizeof(header)));
+        R_TRY(this->Peek(std::addressof(header), sizeof(header)));
         R_TRY(header.Validate());
 
         *out_key_size = header.key_size;
@@ -114,7 +114,7 @@ namespace ams::kvdb {
 
         /* Read the next entry header. */
         ArchiveEntryHeader header;
-        R_TRY(this->Read(&header, sizeof(header)));
+        R_TRY(this->Read(std::addressof(header), sizeof(header)));
         R_TRY(header.Validate());
 
         /* Key size and Value size must be correct. */
@@ -142,7 +142,7 @@ namespace ams::kvdb {
         AMS_ABORT_UNLESS(this->offset == 0);
 
         ArchiveHeader header = ArchiveHeader::Make(entry_count);
-        R_ABORT_UNLESS(this->Write(&header, sizeof(header)));
+        R_ABORT_UNLESS(this->Write(std::addressof(header), sizeof(header)));
     }
 
     void ArchiveWriter::WriteEntry(const void *key, size_t key_size, const void *value, size_t value_size) {
@@ -150,7 +150,7 @@ namespace ams::kvdb {
         AMS_ABORT_UNLESS(this->offset != 0);
 
         ArchiveEntryHeader header = ArchiveEntryHeader::Make(key_size, value_size);
-        R_ABORT_UNLESS(this->Write(&header, sizeof(header)));
+        R_ABORT_UNLESS(this->Write(std::addressof(header), sizeof(header)));
         R_ABORT_UNLESS(this->Write(key, key_size));
         R_ABORT_UNLESS(this->Write(value, value_size));
     }
diff --git a/libraries/libstratosphere/source/ldr/ldr_pm_api.cpp b/libraries/libstratosphere/source/ldr/ldr_pm_api.cpp
index 1a4856e4c..0ad1d405c 100644
--- a/libraries/libstratosphere/source/ldr/ldr_pm_api.cpp
+++ b/libraries/libstratosphere/source/ldr/ldr_pm_api.cpp
@@ -24,12 +24,12 @@ namespace ams::ldr::pm {
     }
 
     Result GetProgramInfo(ProgramInfo *out, const ncm::ProgramLocation &loc) {
-        return ldrPmGetProgramInfo(reinterpret_cast<const NcmProgramLocation *>(&loc), reinterpret_cast<LoaderProgramInfo *>(out));
+        return ldrPmGetProgramInfo(reinterpret_cast<const NcmProgramLocation *>(std::addressof(loc)), reinterpret_cast<LoaderProgramInfo *>(out));
     }
 
     Result PinProgram(PinId *out, const ncm::ProgramLocation &loc) {
         static_assert(sizeof(*out) == sizeof(u64), "PinId definition!");
-        return ldrPmPinProgram(reinterpret_cast<const NcmProgramLocation *>(&loc), reinterpret_cast<u64 *>(out));
+        return ldrPmPinProgram(reinterpret_cast<const NcmProgramLocation *>(std::addressof(loc)), reinterpret_cast<u64 *>(out));
     }
 
     Result UnpinProgram(PinId pin_id) {
@@ -42,7 +42,7 @@ namespace ams::ldr::pm {
 
     Result AtmosphereGetProgramInfo(ProgramInfo *out, cfg::OverrideStatus *out_status, const ncm::ProgramLocation &loc) {
         static_assert(sizeof(*out_status) == sizeof(CfgOverrideStatus), "CfgOverrideStatus definition!");
-        return ldrPmAtmosphereGetProgramInfo(reinterpret_cast<LoaderProgramInfo *>(out), reinterpret_cast<CfgOverrideStatus *>(out_status), reinterpret_cast<const NcmProgramLocation *>(&loc));
+        return ldrPmAtmosphereGetProgramInfo(reinterpret_cast<LoaderProgramInfo *>(out), reinterpret_cast<CfgOverrideStatus *>(out_status), reinterpret_cast<const NcmProgramLocation *>(std::addressof(loc)));
     }
 
     Result SetEnabledProgramVerification(bool enabled) {
@@ -52,7 +52,7 @@ namespace ams::ldr::pm {
     Result AtmospherePinProgram(PinId *out, const ncm::ProgramLocation &loc, const cfg::OverrideStatus &status) {
         static_assert(sizeof(*out) == sizeof(u64), "PinId definition!");
         static_assert(sizeof(status) == sizeof(CfgOverrideStatus), "CfgOverrideStatus definition!");
-        return ldrPmAtmospherePinProgram(reinterpret_cast<u64 *>(out), reinterpret_cast<const NcmProgramLocation *>(&loc), reinterpret_cast<const CfgOverrideStatus *>(&status));
+        return ldrPmAtmospherePinProgram(reinterpret_cast<u64 *>(out), reinterpret_cast<const NcmProgramLocation *>(std::addressof(loc)), reinterpret_cast<const CfgOverrideStatus *>(std::addressof(status)));
     }
 
 }
diff --git a/libraries/libstratosphere/source/lm/lm_remote_log_service.cpp b/libraries/libstratosphere/source/lm/lm_remote_log_service.cpp
index 88a4149b8..5ebe3a1e4 100644
--- a/libraries/libstratosphere/source/lm/lm_remote_log_service.cpp
+++ b/libraries/libstratosphere/source/lm/lm_remote_log_service.cpp
@@ -43,10 +43,10 @@ namespace ams::lm {
             u64 pid_placeholder = 0;
 
             #define NX_SERVICE_ASSUME_NON_DOMAIN
-            R_TRY(serviceDispatchIn(&m_srv, 0, pid_placeholder,
+            R_TRY(serviceDispatchIn(std::addressof(m_srv), 0, pid_placeholder,
                 .in_send_pid = true,
                 .out_num_objects = 1,
-                .out_objects = &logger_srv,
+                .out_objects = std::addressof(logger_srv),
             ));
             #undef NX_SERVICE_ASSUME_NON_DOMAIN
         }
diff --git a/libraries/libstratosphere/source/lm/lm_remote_log_service.hpp b/libraries/libstratosphere/source/lm/lm_remote_log_service.hpp
index 47303c3a5..c948008b8 100644
--- a/libraries/libstratosphere/source/lm/lm_remote_log_service.hpp
+++ b/libraries/libstratosphere/source/lm/lm_remote_log_service.hpp
@@ -32,14 +32,14 @@ namespace ams::lm {
         public:
             /* Actual commands. */
             Result Log(const sf::InAutoSelectBuffer &message) {
-                return serviceDispatch(&m_srv, 0,
+                return serviceDispatch(std::addressof(m_srv), 0,
                     .buffer_attrs = { SfBufferAttr_In | SfBufferAttr_HipcAutoSelect },
                     .buffers = { { message.GetPointer(), message.GetSize() } },
                 );
             }
 
             Result SetDestination(u32 destination) {
-                return serviceDispatchIn(&m_srv, 1, destination);
+                return serviceDispatchIn(std::addressof(m_srv), 1, destination);
             }
     };
     static_assert(lm::IsILogger<RemoteLogger>);
diff --git a/libraries/libstratosphere/source/lmem/impl/lmem_impl_exp_heap.cpp b/libraries/libstratosphere/source/lmem/impl/lmem_impl_exp_heap.cpp
index d59866b93..0da7a0663 100644
--- a/libraries/libstratosphere/source/lmem/impl/lmem_impl_exp_heap.cpp
+++ b/libraries/libstratosphere/source/lmem/impl/lmem_impl_exp_heap.cpp
@@ -43,11 +43,11 @@ namespace ams::lmem::impl {
         }
 
         constexpr inline ExpHeapHead *GetExpHeapHead(HeapHead *heap_head) {
-            return &heap_head->impl_head.exp_heap_head;
+            return std::addressof(heap_head->impl_head.exp_heap_head);
         }
 
         constexpr inline const ExpHeapHead *GetExpHeapHead(const HeapHead *heap_head) {
-            return &heap_head->impl_head.exp_heap_head;
+            return std::addressof(heap_head->impl_head.exp_heap_head);
         }
 
         constexpr inline HeapHead *GetHeapHead(ExpHeapHead *exp_heap_head) {
@@ -197,7 +197,7 @@ namespace ams::lmem::impl {
 
             /* Locate the block. */
             for (auto it = head->free_list.begin(); it != head->free_list.end(); it++) {
-                ExpHeapMemoryBlockHead *cur_free_block = &*it;
+                ExpHeapMemoryBlockHead *cur_free_block = std::addressof(*it);
 
                 if (cur_free_block < region->start) {
                     prev_free_block_it = it;
@@ -220,9 +220,9 @@ namespace ams::lmem::impl {
             auto insertion_it = head->free_list.begin();
             if (prev_free_block_it != head->free_list.end()) {
                 /* There's a previous free block, so we want to insert as the next iterator. */
-                if (GetMemoryBlockEnd(&*prev_free_block_it) == region->start) {
+                if (GetMemoryBlockEnd(std::addressof(*prev_free_block_it)) == region->start) {
                     /* We can coalesce, so do so. */
-                    free_region.start = &*prev_free_block_it;
+                    free_region.start = std::addressof(*prev_free_block_it);
                     insertion_it = head->free_list.erase(prev_free_block_it);
                 } else {
                     /* We can't coalesce, so just select the next iterator. */
@@ -249,7 +249,7 @@ namespace ams::lmem::impl {
         void *ConvertFreeBlockToUsedBlock(ExpHeapHead *head, ExpHeapMemoryBlockHead *block_head, void *block, size_t size, AllocationDirection direction) {
             /* Calculate freed memory regions. */
             MemoryRegion free_region_front;
-            GetMemoryBlockRegion(&free_region_front, block_head);
+            GetMemoryBlockRegion(std::addressof(free_region_front), block_head);
             MemoryRegion free_region_back{ .start = reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(block) + size), .end = free_region_front.end, };
 
             /* Adjust end of head region. */
@@ -308,12 +308,12 @@ namespace ams::lmem::impl {
             size_t best_size = std::numeric_limits<size_t>::max();
 
             for (auto it = exp_heap_head->free_list.begin(); it != exp_heap_head->free_list.end(); it++) {
-                const uintptr_t absolute_block_start = reinterpret_cast<uintptr_t>(GetMemoryBlockStart(&*it));
+                const uintptr_t absolute_block_start = reinterpret_cast<uintptr_t>(GetMemoryBlockStart(std::addressof(*it)));
                 const uintptr_t block_start          = util::AlignUp(absolute_block_start, alignment);
                 const size_t    block_offset         = block_start - absolute_block_start;
 
                 if (it->block_size >= size + block_offset && best_size > it->block_size) {
-                    found_block_head = &*it;
+                    found_block_head = std::addressof(*it);
                     found_block      = reinterpret_cast<void *>(block_start);
                     best_size        = it->block_size;
 
@@ -342,12 +342,12 @@ namespace ams::lmem::impl {
             size_t best_size = std::numeric_limits<size_t>::max();
 
             for (auto it = exp_heap_head->free_list.rbegin(); it != exp_heap_head->free_list.rend(); it++) {
-                const uintptr_t absolute_block_start = reinterpret_cast<uintptr_t>(GetMemoryBlockStart(&*it));
+                const uintptr_t absolute_block_start = reinterpret_cast<uintptr_t>(GetMemoryBlockStart(std::addressof(*it)));
                 const uintptr_t block_start          = util::AlignUp(absolute_block_start, alignment);
                 const size_t    block_offset         = block_start - absolute_block_start;
 
                 if (it->block_size >= size + block_offset && best_size > it->block_size) {
-                    found_block_head = &*it;
+                    found_block_head = std::addressof(*it);
                     found_block      = reinterpret_cast<void *>(block_start);
                     best_size        = it->block_size;
 
@@ -396,7 +396,7 @@ namespace ams::lmem::impl {
         }
 
         /* Get the memory block end, make sure it really is the last block. */
-        ExpHeapMemoryBlockHead *block = &exp_heap_head->free_list.back();
+        ExpHeapMemoryBlockHead *block = std::addressof(exp_heap_head->free_list.back());
         void * const block_start = GetMemoryBlockStart(block);
         const size_t block_size = block->block_size;
         void * const block_end   = reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(block_start) + block_size);
@@ -460,11 +460,11 @@ namespace ams::lmem::impl {
         MemoryRegion region;
 
         /* Erase the heap from the used list, and coalesce it with adjacent blocks. */
-        GetMemoryBlockRegion(&region, block);
+        GetMemoryBlockRegion(std::addressof(region), block);
         exp_heap_head->used_list.erase(exp_heap_head->used_list.iterator_to(*block));
 
         /* Coalesce with adjacent blocks. */
-        const bool coalesced = CoalesceFreedRegion(exp_heap_head, &region);
+        const bool coalesced = CoalesceFreedRegion(exp_heap_head, std::addressof(region));
         AMS_ASSERT(coalesced);
         AMS_UNUSED(coalesced);
     }
@@ -493,8 +493,8 @@ namespace ams::lmem::impl {
             ExpHeapMemoryBlockHead *next_block_head = nullptr;
 
             for (auto it = exp_heap_head->free_list.begin(); it != exp_heap_head->free_list.end(); it++) {
-                if (&*it == cur_block_end) {
-                    next_block_head = &*it;
+                if (std::addressof(*it) == cur_block_end) {
+                    next_block_head = std::addressof(*it);
                     break;
                 }
             }
@@ -508,7 +508,7 @@ namespace ams::lmem::impl {
             {
                 /* Get block region. */
                 MemoryRegion new_free_region;
-                GetMemoryBlockRegion(&new_free_region, next_block_head);
+                GetMemoryBlockRegion(std::addressof(new_free_region), next_block_head);
 
                 /* Remove the next block from the free list. */
                 auto insertion_it = exp_heap_head->free_list.erase(exp_heap_head->free_list.iterator_to(*next_block_head));
@@ -539,7 +539,7 @@ namespace ams::lmem::impl {
 
             /* Try to free the new memory. */
             block_head->block_size = size;
-            if (!CoalesceFreedRegion(exp_heap_head, &new_free_region)) {
+            if (!CoalesceFreedRegion(exp_heap_head, std::addressof(new_free_region))) {
                 /* We didn't shrink the block successfully, so restore the size. */
                 block_head->block_size = original_block_size;
             }
@@ -567,9 +567,9 @@ namespace ams::lmem::impl {
         size_t max_size   = std::numeric_limits<size_t>::min();
         size_t min_offset = std::numeric_limits<size_t>::max();
         for (const auto &it : GetExpHeapHead(handle)->free_list) {
-            const uintptr_t absolute_block_start = reinterpret_cast<uintptr_t>(GetMemoryBlockStart(&it));
+            const uintptr_t absolute_block_start = reinterpret_cast<uintptr_t>(GetMemoryBlockStart(std::addressof(it)));
             const uintptr_t block_start          = util::AlignUp(absolute_block_start, alignment);
-            const uintptr_t block_end            = reinterpret_cast<uintptr_t>(GetMemoryBlockEnd(&it));
+            const uintptr_t block_end            = reinterpret_cast<uintptr_t>(GetMemoryBlockEnd(std::addressof(it)));
 
             if (block_start < block_end) {
                 const size_t block_size = GetPointerDifference(block_start, block_end);
@@ -620,7 +620,7 @@ namespace ams::lmem::impl {
         AMS_ASSERT(IsValidHeapHandle(handle));
 
         for (auto &it : GetExpHeapHead(handle)->used_list) {
-            (*visitor)(GetMemoryBlockStart(&it), handle, user_data);
+            (*visitor)(GetMemoryBlockStart(std::addressof(it)), handle, user_data);
         }
     }
 
diff --git a/libraries/libstratosphere/source/lmem/impl/lmem_impl_unit_heap.cpp b/libraries/libstratosphere/source/lmem/impl/lmem_impl_unit_heap.cpp
index f08763b85..fc6a78ce8 100644
--- a/libraries/libstratosphere/source/lmem/impl/lmem_impl_unit_heap.cpp
+++ b/libraries/libstratosphere/source/lmem/impl/lmem_impl_unit_heap.cpp
@@ -27,11 +27,11 @@ namespace ams::lmem::impl {
         }
 
         constexpr inline UnitHeapHead *GetUnitHeapHead(HeapHead *heap_head) {
-            return &heap_head->impl_head.unit_heap_head;
+            return std::addressof(heap_head->impl_head.unit_heap_head);
         }
 
         constexpr inline const UnitHeapHead *GetUnitHeapHead(const HeapHead *heap_head) {
-            return &heap_head->impl_head.unit_heap_head;
+            return std::addressof(heap_head->impl_head.unit_heap_head);
         }
 
         inline UnitHead *PopUnit(UnitHeapList *list) {
@@ -190,7 +190,7 @@ namespace ams::lmem::impl {
 
         /* Allocate a unit. */
         UnitHeapHead *unit_heap = GetUnitHeapHead(handle);
-        UnitHead *unit = PopUnit(&unit_heap->free_list);
+        UnitHead *unit = PopUnit(std::addressof(unit_heap->free_list));
         if (unit != nullptr) {
             /* Fill memory with pattern for debug, if needed. */
             FillAllocatedMemory(handle, unit, unit_heap->unit_size);
@@ -215,7 +215,7 @@ namespace ams::lmem::impl {
         FillFreedMemory(handle, block, unit_heap->unit_size);
 
         /* Push the unit onto the free list. */
-        PushUnit(&unit_heap->free_list, reinterpret_cast<UnitHead *>(block));
+        PushUnit(std::addressof(unit_heap->free_list), static_cast<UnitHead *>(block));
 
         /* Note that we freed a unit. */
         unit_heap->num_units--;
diff --git a/libraries/libstratosphere/source/lr/lr_add_on_content_location_resolver_impl.cpp b/libraries/libstratosphere/source/lr/lr_add_on_content_location_resolver_impl.cpp
index 84b802521..f76a44464 100644
--- a/libraries/libstratosphere/source/lr/lr_add_on_content_location_resolver_impl.cpp
+++ b/libraries/libstratosphere/source/lr/lr_add_on_content_location_resolver_impl.cpp
@@ -21,19 +21,19 @@ namespace ams::lr {
     Result AddOnContentLocationResolverImpl::ResolveAddOnContentPath(sf::Out<Path> out, ncm::DataId id) {
         /* Find a storage that contains the given program id. */
         ncm::StorageId storage_id = ncm::StorageId::None;
-        R_UNLESS(this->registered_storages.Find(&storage_id, id), lr::ResultAddOnContentNotFound());
+        R_UNLESS(this->registered_storages.Find(std::addressof(storage_id), id), lr::ResultAddOnContentNotFound());
 
         /* Obtain a content meta database for the storage id. */
         ncm::ContentMetaDatabase content_meta_database;
-        R_TRY(ncm::OpenContentMetaDatabase(&content_meta_database, storage_id));
+        R_TRY(ncm::OpenContentMetaDatabase(std::addressof(content_meta_database), storage_id));
 
         /* Find the latest data content id for the given program id. */
         ncm::ContentId data_content_id;
-        R_TRY(content_meta_database.GetLatestData(&data_content_id, id));
+        R_TRY(content_meta_database.GetLatestData(std::addressof(data_content_id), id));
 
         /* Obtain a content storage for the storage id. */
         ncm::ContentStorage content_storage;
-        R_TRY(ncm::OpenContentStorage(&content_storage, storage_id));
+        R_TRY(ncm::OpenContentStorage(std::addressof(content_storage), storage_id));
 
         /* Get the path of the data content. */
         static_assert(sizeof(lr::Path) == sizeof(ncm::Path));
diff --git a/libraries/libstratosphere/source/lr/lr_content_location_resolver_impl.cpp b/libraries/libstratosphere/source/lr/lr_content_location_resolver_impl.cpp
index c6f566795..ec73341cc 100644
--- a/libraries/libstratosphere/source/lr/lr_content_location_resolver_impl.cpp
+++ b/libraries/libstratosphere/source/lr/lr_content_location_resolver_impl.cpp
@@ -34,7 +34,7 @@ namespace ams::lr {
 
         /* Find the latest program content for the program id. */
         ncm::ContentId program_content_id;
-        R_TRY_CATCH(this->content_meta_database.GetLatestProgram(&program_content_id, id)) {
+        R_TRY_CATCH(this->content_meta_database.GetLatestProgram(std::addressof(program_content_id), id)) {
             R_CONVERT(ncm::ResultContentMetaNotFound, lr::ResultProgramNotFound())
         } R_END_TRY_CATCH;
 
@@ -62,7 +62,7 @@ namespace ams::lr {
     Result ContentLocationResolverImpl::ResolveDataPath(sf::Out<Path> out, ncm::DataId id) {
         /* Find the latest data content for the program id. */
         ncm::ContentId data_content_id;
-        R_TRY(this->content_meta_database.GetLatestData(&data_content_id, id));
+        R_TRY(this->content_meta_database.GetLatestData(std::addressof(data_content_id), id));
 
         /* Obtain the content path. */
         this->GetContentStoragePath(out.GetPointer(), data_content_id);
@@ -109,8 +109,8 @@ namespace ams::lr {
         /* Obtain content meta database and content storage objects for this resolver's storage. */
         ncm::ContentMetaDatabase meta_db;
         ncm::ContentStorage storage;
-        R_TRY(ncm::OpenContentMetaDatabase(&meta_db, this->storage_id));
-        R_TRY(ncm::OpenContentStorage(&storage, this->storage_id));
+        R_TRY(ncm::OpenContentMetaDatabase(std::addressof(meta_db), this->storage_id));
+        R_TRY(ncm::OpenContentStorage(std::addressof(storage), this->storage_id));
 
         /* Store the acquired objects. */
         this->content_meta_database = std::move(meta_db);
diff --git a/libraries/libstratosphere/source/lr/lr_location_redirector.cpp b/libraries/libstratosphere/source/lr/lr_location_redirector.cpp
index 7833b2452..fd4e34eb8 100644
--- a/libraries/libstratosphere/source/lr/lr_location_redirector.cpp
+++ b/libraries/libstratosphere/source/lr/lr_location_redirector.cpp
@@ -84,13 +84,13 @@ namespace ams::lr {
         }
     }
 
-    void LocationRedirector::EraseRedirection(ncm::ProgramId program_id)
-    {
+    void LocationRedirector::EraseRedirection(ncm::ProgramId program_id) {
         /* Remove any redirections with a matching program id. */
-        for (auto &redirection : this->redirection_list) {
-            if (redirection.GetProgramId() == program_id) {
-                this->redirection_list.erase(this->redirection_list.iterator_to(redirection));
-                delete &redirection;
+        for (auto it = this->redirection_list.begin(); it != this->redirection_list.end();) {
+            if (it->GetProgramId() == program_id) {
+                auto *redirection = std::addressof(*it);
+                this->redirection_list.erase(it);
+                delete redirection;
                 break;
             }
         }
@@ -100,9 +100,9 @@ namespace ams::lr {
         /* Remove any redirections with matching flags. */
         for (auto it = this->redirection_list.begin(); it != this->redirection_list.end();) {
             if ((it->GetFlags() & flags) == flags) {
-                auto old = it;
+                auto *redirection = std::addressof(*it);
                 it = this->redirection_list.erase(it);
-                delete std::addressof(*old);
+                delete redirection;
             } else {
                 it++;
             }
@@ -118,9 +118,9 @@ namespace ams::lr {
             }
 
             /* Remove the redirection. */
-            auto old = it;
+            auto *redirection = std::addressof(*it);
             it = this->redirection_list.erase(it);
-            delete std::addressof(*old);
+            delete redirection;
         }
     }
 
diff --git a/libraries/libstratosphere/source/lr/lr_remote_location_resolver_impl.hpp b/libraries/libstratosphere/source/lr/lr_remote_location_resolver_impl.hpp
index 9b8c67161..500e2757a 100644
--- a/libraries/libstratosphere/source/lr/lr_remote_location_resolver_impl.hpp
+++ b/libraries/libstratosphere/source/lr/lr_remote_location_resolver_impl.hpp
@@ -24,7 +24,7 @@ namespace ams::lr {
         public:
             RemoteLocationResolverImpl(::LrLocationResolver &l) : srv(l) { /* ... */ }
 
-            ~RemoteLocationResolverImpl() { ::serviceClose(&srv.s); }
+            ~RemoteLocationResolverImpl() { ::serviceClose(std::addressof(srv.s)); }
         public:
             /* Actual commands. */
             Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId id) {
diff --git a/libraries/libstratosphere/source/lr/lr_remote_registered_location_resolver_impl.hpp b/libraries/libstratosphere/source/lr/lr_remote_registered_location_resolver_impl.hpp
index 1f0ff9afc..e57a78faf 100644
--- a/libraries/libstratosphere/source/lr/lr_remote_registered_location_resolver_impl.hpp
+++ b/libraries/libstratosphere/source/lr/lr_remote_registered_location_resolver_impl.hpp
@@ -25,7 +25,7 @@ namespace ams::lr {
         public:
             RemoteRegisteredLocationResolverImpl(::LrRegisteredLocationResolver &l) : srv(l) { /* ... */ }
 
-            ~RemoteRegisteredLocationResolverImpl() { ::serviceClose(&srv.s); }
+            ~RemoteRegisteredLocationResolverImpl() { ::serviceClose(std::addressof(srv.s)); }
         public:
             /* Actual commands. */
             Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId id) {
diff --git a/libraries/libstratosphere/source/ncm/ncm_content_manager_impl.cpp b/libraries/libstratosphere/source/ncm/ncm_content_manager_impl.cpp
index 8b5376aa6..9c7f02706 100644
--- a/libraries/libstratosphere/source/ncm/ncm_content_manager_impl.cpp
+++ b/libraries/libstratosphere/source/ncm/ncm_content_manager_impl.cpp
@@ -251,7 +251,7 @@ namespace ams::ncm {
 
         /* Obtain the content meta database root. */
         ContentMetaDatabaseRoot *root;
-        R_TRY(this->GetContentMetaDatabaseRoot(&root, storage_id));
+        R_TRY(this->GetContentMetaDatabaseRoot(std::addressof(root), storage_id));
 
         /* Print the savedata path. */
         PathString savedata_db_path;
@@ -331,14 +331,14 @@ namespace ams::ncm {
         }
 
         /* First, setup the BuiltInSystem storage entry. */
-        R_TRY(this->InitializeContentStorageRoot(&this->content_storage_roots[this->num_content_storage_entries++], StorageId::BuiltInSystem, fs::ContentStorageId::System));
+        R_TRY(this->InitializeContentStorageRoot(std::addressof(this->content_storage_roots[this->num_content_storage_entries++]), StorageId::BuiltInSystem, fs::ContentStorageId::System));
         if (R_FAILED(this->VerifyContentStorage(StorageId::BuiltInSystem))) {
             R_TRY(this->CreateContentStorage(StorageId::BuiltInSystem));
         }
         R_TRY(this->ActivateContentStorage(StorageId::BuiltInSystem));
 
         /* Next, the BuiltInSystem content meta entry. */
-        R_TRY(this->InitializeContentMetaDatabaseRoot(&this->content_meta_database_roots[this->num_content_meta_entries++], StorageId::BuiltInSystem, BuiltInSystemSystemSaveDataInfo, SystemMaxContentMetaCount, std::addressof(g_system_content_meta_memory_resource)));
+        R_TRY(this->InitializeContentMetaDatabaseRoot(std::addressof(this->content_meta_database_roots[this->num_content_meta_entries++]), StorageId::BuiltInSystem, BuiltInSystemSystemSaveDataInfo, SystemMaxContentMetaCount, std::addressof(g_system_content_meta_memory_resource)));
 
         if (R_FAILED(this->VerifyContentMetaDatabase(StorageId::BuiltInSystem))) {
             R_TRY(this->CreateContentMetaDatabase(StorageId::BuiltInSystem));
@@ -365,19 +365,19 @@ namespace ams::ncm {
         R_TRY(this->ActivateContentMetaDatabase(StorageId::BuiltInSystem));
 
         /* Now for BuiltInUser's content storage and content meta entries. */
-        R_TRY(this->InitializeContentStorageRoot(&this->content_storage_roots[this->num_content_storage_entries++], StorageId::BuiltInUser, fs::ContentStorageId::User));
-        R_TRY(this->InitializeContentMetaDatabaseRoot(&this->content_meta_database_roots[this->num_content_meta_entries++], StorageId::BuiltInUser, BuiltInUserSystemSaveDataInfo, UserMaxContentMetaCount, std::addressof(g_sd_and_user_content_meta_memory_resource)));
+        R_TRY(this->InitializeContentStorageRoot(std::addressof(this->content_storage_roots[this->num_content_storage_entries++]), StorageId::BuiltInUser, fs::ContentStorageId::User));
+        R_TRY(this->InitializeContentMetaDatabaseRoot(std::addressof(this->content_meta_database_roots[this->num_content_meta_entries++]), StorageId::BuiltInUser, BuiltInUserSystemSaveDataInfo, UserMaxContentMetaCount, std::addressof(g_sd_and_user_content_meta_memory_resource)));
 
         /* Beyond this point, N uses hardcoded indices. */
 
         /* Next SdCard's content storage and content meta entries. */
-        R_TRY(this->InitializeContentStorageRoot(&this->content_storage_roots[2], StorageId::SdCard, fs::ContentStorageId::SdCard));
-        R_TRY(this->InitializeContentMetaDatabaseRoot(&this->content_meta_database_roots[2], StorageId::SdCard, SdCardSystemSaveDataInfo, SdCardMaxContentMetaCount, std::addressof(g_sd_and_user_content_meta_memory_resource)));
+        R_TRY(this->InitializeContentStorageRoot(std::addressof(this->content_storage_roots[2]), StorageId::SdCard, fs::ContentStorageId::SdCard));
+        R_TRY(this->InitializeContentMetaDatabaseRoot(std::addressof(this->content_meta_database_roots[2]), StorageId::SdCard, SdCardSystemSaveDataInfo, SdCardMaxContentMetaCount, std::addressof(g_sd_and_user_content_meta_memory_resource)));
 
         /* GameCard's content storage and content meta entries. */
         /* N doesn't set a content storage id for game cards, so we'll just use 0 (System). */
-        R_TRY(this->InitializeGameCardContentStorageRoot(&this->content_storage_roots[3]));
-        R_TRY(this->InitializeGameCardContentMetaDatabaseRoot(&this->content_meta_database_roots[3], GameCardMaxContentMetaCount, std::addressof(g_gamecard_content_meta_memory_resource)));
+        R_TRY(this->InitializeGameCardContentStorageRoot(std::addressof(this->content_storage_roots[3])));
+        R_TRY(this->InitializeGameCardContentMetaDatabaseRoot(std::addressof(this->content_meta_database_roots[3]), GameCardMaxContentMetaCount, std::addressof(g_gamecard_content_meta_memory_resource)));
 
         this->initialized = true;
         return ResultSuccess();
@@ -408,7 +408,7 @@ namespace ams::ncm {
 
         /* Obtain the content meta database root. */
         ContentMetaDatabaseRoot *root;
-        R_TRY(this->GetContentMetaDatabaseRoot(&root, storage_id));
+        R_TRY(this->GetContentMetaDatabaseRoot(std::addressof(root), storage_id));
 
         /* Mount (and optionally create) save data for the root. */
         R_TRY(this->EnsureAndMountSystemSaveData(root->mount_name, root->info));
@@ -449,7 +449,7 @@ namespace ams::ncm {
 
         /* Obtain the content meta database root. */
         ContentMetaDatabaseRoot *root;
-        R_TRY(this->GetContentMetaDatabaseRoot(&root, storage_id));
+        R_TRY(this->GetContentMetaDatabaseRoot(std::addressof(root), storage_id));
 
         /* Mount save data for non-existing content meta databases. */
         const bool mount = !root->content_meta_database;
@@ -460,7 +460,7 @@ namespace ams::ncm {
 
         /* Ensure the root path exists. */
         bool has_dir = false;
-        R_TRY(fs::HasDirectory(&has_dir, root->path));
+        R_TRY(fs::HasDirectory(std::addressof(has_dir), root->path));
         R_UNLESS(has_dir, ncm::ResultInvalidContentMetaDatabase());
 
         return ResultSuccess();
@@ -492,7 +492,7 @@ namespace ams::ncm {
 
         /* Obtain the content meta database root. */
         ContentMetaDatabaseRoot *root;
-        R_TRY(this->GetContentMetaDatabaseRoot(&root, storage_id));
+        R_TRY(this->GetContentMetaDatabaseRoot(std::addressof(root), storage_id));
 
         if (hos::GetVersion() >= hos::Version_2_0_0) {
             /* Obtain the content meta database if already active. */
@@ -524,7 +524,7 @@ namespace ams::ncm {
 
         /* Obtain the content meta database root. */
         ContentMetaDatabaseRoot *root;
-        R_TRY(this->GetContentMetaDatabaseRoot(&root, storage_id));
+        R_TRY(this->GetContentMetaDatabaseRoot(std::addressof(root), storage_id));
 
         /* Delete save data for the content meta database root. */
         return fs::DeleteSaveData(root->info.space_id, root->info.id);
@@ -614,7 +614,7 @@ namespace ams::ncm {
 
         /* Obtain the content meta database root. */
         ContentMetaDatabaseRoot *root;
-        R_TRY(this->GetContentMetaDatabaseRoot(&root, storage_id));
+        R_TRY(this->GetContentMetaDatabaseRoot(std::addressof(root), storage_id));
 
         /* Already activated. */
         R_SUCCEED_IF(root->content_meta_database != nullptr);
@@ -652,7 +652,7 @@ namespace ams::ncm {
 
         /* Obtain the content meta database root. */
         ContentMetaDatabaseRoot *root;
-        R_TRY(this->GetContentMetaDatabaseRoot(&root, storage_id));
+        R_TRY(this->GetContentMetaDatabaseRoot(std::addressof(root), storage_id));
 
         /* Disable the content meta database, if present. */
         if (root->content_meta_database != nullptr) {
diff --git a/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.cpp b/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.cpp
index 284bd7114..5338c2e6f 100644
--- a/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.cpp
+++ b/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.cpp
@@ -88,7 +88,7 @@ namespace ams::ncm {
                     /* Call the process function. */
                     bool should_continue = true;
                     bool should_retry_dir_read = false;
-                    R_TRY(f(&should_continue, &should_retry_dir_read, current_path, entry));
+                    R_TRY(f(std::addressof(should_continue), std::addressof(should_retry_dir_read), current_path, entry));
 
                     /* If the provided function wishes to terminate immediately, we should respect it. */
                     if (!should_continue) {
@@ -368,7 +368,7 @@ namespace ams::ncm {
         MakeContentPath(std::addressof(path), content_id, this->make_content_path_func, this->root_path);
 
         /* Open the content file and store to the cache. */
-        R_TRY_CATCH(fs::OpenFile(&this->cached_file_handle, path, fs::OpenMode_Read)) {
+        R_TRY_CATCH(fs::OpenFile(std::addressof(this->cached_file_handle), path, fs::OpenMode_Read)) {
             R_CONVERT(ams::fs::ResultPathNotFound, ncm::ResultContentNotFound())
         } R_END_TRY_CATCH;
 
@@ -416,7 +416,7 @@ namespace ams::ncm {
 
         /* Check if placeholder file exists. */
         bool has = false;
-        R_TRY(fs::HasFile(&has, placeholder_path));
+        R_TRY(fs::HasFile(std::addressof(has), placeholder_path));
         out.SetValue(has);
         return ResultSuccess();
     }
@@ -464,7 +464,7 @@ namespace ams::ncm {
 
         /* Check if the content file exists. */
         bool has = false;
-        R_TRY(fs::HasFile(&has, content_path));
+        R_TRY(fs::HasFile(std::addressof(has), content_path));
         out.SetValue(has);
         return ResultSuccess();
     }
@@ -714,7 +714,7 @@ namespace ams::ncm {
     Result ContentStorageImpl::GetRightsIdFromPlaceHolderIdDeprecated(sf::Out<ams::fs::RightsId> out_rights_id, PlaceHolderId placeholder_id) {
         /* Obtain the regular rights id for the placeholder id. */
         ncm::RightsId rights_id;
-        R_TRY(this->GetRightsIdFromPlaceHolderId(&rights_id, placeholder_id));
+        R_TRY(this->GetRightsIdFromPlaceHolderId(std::addressof(rights_id), placeholder_id));
 
         /* Output the fs rights id. */
         out_rights_id.SetValue(rights_id.id);
@@ -735,7 +735,7 @@ namespace ams::ncm {
     Result ContentStorageImpl::GetRightsIdFromContentIdDeprecated(sf::Out<ams::fs::RightsId> out_rights_id, ContentId content_id) {
         /* Obtain the regular rights id for the content id. */
         ncm::RightsId rights_id;
-        R_TRY(this->GetRightsIdFromContentId(&rights_id, content_id));
+        R_TRY(this->GetRightsIdFromContentId(std::addressof(rights_id), content_id));
 
         /* Output the fs rights id. */
         out_rights_id.SetValue(rights_id.id);
@@ -893,7 +893,7 @@ namespace ams::ncm {
 
         /* Get the rights id. */
         ncm::RightsId rights_id;
-        R_TRY(GetRightsId(&rights_id, common_path));
+        R_TRY(GetRightsId(std::addressof(rights_id), common_path));
         this->rights_id_cache->Store(cache_content_id, rights_id);
 
         /* Set output. */
diff --git a/libraries/libstratosphere/source/ncm/ncm_host_content_storage_impl.cpp b/libraries/libstratosphere/source/ncm/ncm_host_content_storage_impl.cpp
index 3e92b5bde..540e69bfd 100644
--- a/libraries/libstratosphere/source/ncm/ncm_host_content_storage_impl.cpp
+++ b/libraries/libstratosphere/source/ncm/ncm_host_content_storage_impl.cpp
@@ -137,7 +137,7 @@ namespace ams::ncm {
     Result HostContentStorageImpl::GetRightsIdFromContentIdDeprecated(sf::Out<ams::fs::RightsId> out_rights_id, ContentId content_id) {
         /* Obtain the regular rights id for the content id. */
         ncm::RightsId rights_id;
-        R_TRY(this->GetRightsIdFromContentId(&rights_id, content_id));
+        R_TRY(this->GetRightsIdFromContentId(std::addressof(rights_id), content_id));
 
         /* Output the fs rights id. */
         out_rights_id.SetValue(rights_id.id);
diff --git a/libraries/libstratosphere/source/ncm/ncm_install_task_base.cpp b/libraries/libstratosphere/source/ncm/ncm_install_task_base.cpp
index 07041b9a7..218e0ddbc 100644
--- a/libraries/libstratosphere/source/ncm/ncm_install_task_base.cpp
+++ b/libraries/libstratosphere/source/ncm/ncm_install_task_base.cpp
@@ -206,7 +206,7 @@ namespace ams::ncm {
 
         /* Open the relevant content storage. */
         ContentStorage content_storage;
-        R_TRY(ncm::OpenContentStorage(&content_storage, storage_id));
+        R_TRY(ncm::OpenContentStorage(std::addressof(content_storage), storage_id));
 
         /* Iterate over content infos. */
         for (size_t i = 0; i < reader.GetContentCount(); i++) {
@@ -464,7 +464,7 @@ namespace ams::ncm {
 
                 /* Open the content storage for this meta. */
                 ContentStorage content_storage;
-                R_TRY(OpenContentStorage(&content_storage, storage_id));
+                R_TRY(OpenContentStorage(std::addressof(content_storage), storage_id));
 
                 /* Open the content meta database for this meta. */
                 ContentMetaDatabase meta_db;
@@ -546,7 +546,7 @@ namespace ams::ncm {
 
         /* Open the content storage for the content info. */
         ContentStorage content_storage;
-        R_TRY(OpenContentStorage(&content_storage, content_info->storage_id));
+        R_TRY(OpenContentStorage(std::addressof(content_storage), content_info->storage_id));
 
         /* Write data to the placeholder. */
         R_TRY(content_storage.WritePlaceHolder(content_info->placeholder_id, content_info->written, data, data_size));
@@ -658,7 +658,7 @@ namespace ams::ncm {
 
                 /* Open the relevant content storage. */
                 ContentStorage content_storage;
-                R_TRY(ncm::OpenContentStorage(&content_storage, storage_id));
+                R_TRY(ncm::OpenContentStorage(std::addressof(content_storage), storage_id));
 
                 /* Update the storage id in the header. */
                 auto writer = content_meta.GetWriter();
@@ -670,7 +670,7 @@ namespace ams::ncm {
 
                     /* Check if we have the content already exists. */
                     bool has_content;
-                    R_TRY(content_storage.Has(&has_content, content_info->GetId()));
+                    R_TRY(content_storage.Has(std::addressof(has_content), content_info->GetId()));
 
                     if (has_content) {
                         /* Add the size of installed content infos to the total size. */
@@ -739,7 +739,7 @@ namespace ams::ncm {
     Result InstallTaskBase::PrepareContentMeta(const InstallContentMetaInfo &meta_info, util::optional<ContentMetaKey> expected_key, util::optional<u32> source_version) {
         /* Open the BuiltInSystem content storage. */
         ContentStorage content_storage;
-        R_TRY(OpenContentStorage(&content_storage, StorageId::BuiltInSystem));
+        R_TRY(OpenContentStorage(std::addressof(content_storage), StorageId::BuiltInSystem));
 
         /* Write content meta to a placeholder. */
         InstallContentInfo content_info;
@@ -1104,7 +1104,7 @@ namespace ams::ncm {
 
         /* Open the content storage. */
         ContentStorage content_storage;
-        R_TRY(ncm::OpenContentStorage(&content_storage, storage_id));
+        R_TRY(ncm::OpenContentStorage(std::addressof(content_storage), storage_id));
 
         /* Iterate over content meta. */
         for (s32 i = 0; i < count; i++) {
@@ -1162,7 +1162,7 @@ namespace ams::ncm {
 
         /* Open the BuiltInSystem content storage. */
         ContentStorage content_storage;
-        R_TRY(ncm::OpenContentStorage(&content_storage, StorageId::BuiltInSystem));
+        R_TRY(ncm::OpenContentStorage(std::addressof(content_storage), StorageId::BuiltInSystem));
 
         /* Write content meta to a placeholder. */
         InstallContentInfo content_info;
@@ -1375,7 +1375,7 @@ namespace ams::ncm {
 
             /* Open the relevant content storage. */
             ContentStorage content_storage;
-            R_TRY(ncm::OpenContentStorage(&content_storage, content_info->storage_id));
+            R_TRY(ncm::OpenContentStorage(std::addressof(content_storage), content_info->storage_id));
 
             /* Get the rights id. */
             RightsId rights_id;
diff --git a/libraries/libstratosphere/source/ncm/ncm_placeholder_accessor.cpp b/libraries/libstratosphere/source/ncm/ncm_placeholder_accessor.cpp
index 69d47d6d5..13be1c60e 100644
--- a/libraries/libstratosphere/source/ncm/ncm_placeholder_accessor.cpp
+++ b/libraries/libstratosphere/source/ncm/ncm_placeholder_accessor.cpp
@@ -137,7 +137,7 @@ namespace ams::ncm {
         /* Attempt to find a cache entry with the same placeholder id. */
         for (size_t i = 0; i < MaxCacheEntries; i++) {
             if (placeholder_id == this->caches[i].id) {
-                return &this->caches[i];
+                return std::addressof(this->caches[i]);
             }
         }
         return nullptr;
diff --git a/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.cpp b/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.cpp
index cb9e23249..abb7704d7 100644
--- a/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.cpp
+++ b/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.cpp
@@ -224,7 +224,7 @@ namespace ams::ncm {
     Result ReadOnlyContentStorageImpl::GetRightsIdFromContentIdDeprecated(sf::Out<ams::fs::RightsId> out_rights_id, ContentId content_id) {
         /* Obtain the regular rights id for the content id. */
         ncm::RightsId rights_id;
-        R_TRY(this->GetRightsIdFromContentId(&rights_id, content_id));
+        R_TRY(this->GetRightsIdFromContentId(std::addressof(rights_id), content_id));
 
         /* Output the fs rights id. */
         out_rights_id.SetValue(rights_id.id);
@@ -240,7 +240,7 @@ namespace ams::ncm {
 
         /* Get the rights id. */
         ncm::RightsId rights_id;
-        R_TRY(GetRightsId(&rights_id, path));
+        R_TRY(GetRightsId(std::addressof(rights_id), path));
         out_rights_id.SetValue(rights_id);
 
         return ResultSuccess();
diff --git a/libraries/libstratosphere/source/os/impl/os_multiple_wait_impl.cpp b/libraries/libstratosphere/source/os/impl/os_multiple_wait_impl.cpp
index 34eea3a28..ba48dcb78 100644
--- a/libraries/libstratosphere/source/os/impl/os_multiple_wait_impl.cpp
+++ b/libraries/libstratosphere/source/os/impl/os_multiple_wait_impl.cpp
@@ -70,7 +70,7 @@ namespace ams::os::impl {
             this->current_time = GetCurrentTick().ToTimeSpan();
 
             TimeSpan min_timeout = 0;
-            MultiWaitHolderBase *min_timeout_object = this->RecalculateNextTimeout(&min_timeout, end_time);
+            MultiWaitHolderBase *min_timeout_object = this->RecalculateNextTimeout(std::addressof(min_timeout), end_time);
 
             s32 index = WaitInvalid;
             Result wait_result = ResultSuccess();
@@ -141,11 +141,10 @@ namespace ams::os::impl {
 
         for (MultiWaitHolderBase &holder_base : this->multi_wait_list) {
             if (auto handle = holder_base.GetHandle(); handle != os::InvalidNativeHandle) {
-                AMS_ASSERT(count < num);
-                AMS_UNUSED(num);
+                AMS_ABORT_UNLESS(count < num);
 
                 out_handles[count] = handle;
-                out_objects[count] = &holder_base;
+                out_objects[count] = std::addressof(holder_base);
                 count++;
             }
         }
@@ -160,7 +159,7 @@ namespace ams::os::impl {
             TriBool is_signaled = holder_base.LinkToObjectList();
 
             if (signaled_holder == nullptr && is_signaled == TriBool::True) {
-                signaled_holder = &holder_base;
+                signaled_holder = std::addressof(holder_base);
             }
         }
 
@@ -179,7 +178,7 @@ namespace ams::os::impl {
 
         for (MultiWaitHolderBase &holder_base : this->multi_wait_list) {
             if (const TimeSpan cur_time = holder_base.GetAbsoluteWakeupTime(); cur_time < min_time) {
-                min_timeout_holder = &holder_base;
+                min_timeout_holder = std::addressof(holder_base);
                 min_time = cur_time;
             }
         }
diff --git a/libraries/libstratosphere/source/os/impl/os_multiple_wait_object_list.hpp b/libraries/libstratosphere/source/os/impl/os_multiple_wait_object_list.hpp
index 298b93f5f..d70eab597 100644
--- a/libraries/libstratosphere/source/os/impl/os_multiple_wait_object_list.hpp
+++ b/libraries/libstratosphere/source/os/impl/os_multiple_wait_object_list.hpp
@@ -27,7 +27,7 @@ namespace ams::os::impl {
         public:
             void SignalAllThreads() {
                 for (MultiWaitHolderBase &holder_base : this->object_list) {
-                    holder_base.GetMultiWait()->SignalAndWakeupThread(&holder_base);
+                    holder_base.GetMultiWait()->SignalAndWakeupThread(std::addressof(holder_base));
                 }
             }
 
diff --git a/libraries/libstratosphere/source/os/impl/os_rw_lock_target_impl.os.horizon.cpp b/libraries/libstratosphere/source/os/impl/os_rw_lock_target_impl.os.horizon.cpp
index d77cc1c4a..a90ac69e4 100644
--- a/libraries/libstratosphere/source/os/impl/os_rw_lock_target_impl.os.horizon.cpp
+++ b/libraries/libstratosphere/source/os/impl/os_rw_lock_target_impl.os.horizon.cpp
@@ -20,7 +20,7 @@
 namespace ams::os::impl {
 
     #define ATOMIC_COMPARE_EXCHANGE_LOCK_COUNT(dst_ref, expected_ref, desired_ref, success, fail) \
-        (__atomic_compare_exchange(reinterpret_cast<u64 *>(&dst_ref), reinterpret_cast<u64 *>(&expected_ref), reinterpret_cast<u64 *>(&desired_ref), true, success, fail))
+        (__atomic_compare_exchange(reinterpret_cast<u64 *>(std::addressof(dst_ref)), reinterpret_cast<u64 *>(std::addressof(expected_ref)), reinterpret_cast<u64 *>(std::addressof(desired_ref)), true, success, fail))
 
 
     void ReaderWriterLockHorizonImpl::AcquireReadLockWriteLocked(os::ReaderWriterLockType *rw_lock) {
diff --git a/libraries/libstratosphere/source/os/os_multiple_wait.cpp b/libraries/libstratosphere/source/os/os_multiple_wait.cpp
index 4e6e0ee9a..47d2b3308 100644
--- a/libraries/libstratosphere/source/os/os_multiple_wait.cpp
+++ b/libraries/libstratosphere/source/os/os_multiple_wait.cpp
@@ -102,7 +102,7 @@ namespace ams::os {
         AMS_ASSERT(!holder_base->IsLinked());
 
         impl.LinkMultiWaitHolder(*holder_base);
-        holder_base->SetMultiWait(&impl);
+        holder_base->SetMultiWait(std::addressof(impl));
     }
 
     void UnlinkMultiWaitHolder(MultiWaitHolderType *holder) {
diff --git a/libraries/libstratosphere/source/os/os_random.cpp b/libraries/libstratosphere/source/os/os_random.cpp
index ef18f0467..0d5dafbae 100644
--- a/libraries/libstratosphere/source/os/os_random.cpp
+++ b/libraries/libstratosphere/source/os/os_random.cpp
@@ -30,7 +30,7 @@ namespace ams::os {
             const T EffectiveMax = (std::numeric_limits<T>::max() / max) * max;
             T cur_rnd;
             while (true) {
-                os::GenerateRandomBytes(&cur_rnd, sizeof(T));
+                os::GenerateRandomBytes(std::addressof(cur_rnd), sizeof(T));
                 if (cur_rnd < EffectiveMax) {
                     return cur_rnd % max;
                 }
@@ -43,7 +43,7 @@ namespace ams::os {
         std::scoped_lock lk(g_random_mutex);
 
         if (AMS_UNLIKELY(!g_initialized_random)) {
-            impl::InitializeRandomImpl(&g_random);
+            impl::InitializeRandomImpl(std::addressof(g_random));
             g_initialized_random = true;
         }
 
diff --git a/libraries/libstratosphere/source/patcher/patcher_api.cpp b/libraries/libstratosphere/source/patcher/patcher_api.cpp
index 357705770..1898046b0 100644
--- a/libraries/libstratosphere/source/patcher/patcher_api.cpp
+++ b/libraries/libstratosphere/source/patcher/patcher_api.cpp
@@ -66,11 +66,11 @@ namespace ams::patcher {
         bool MatchesModuleId(const char *name, size_t name_len, size_t extension_len, const ro::ModuleId *module_id) {
             /* Get module id. */
             ro::ModuleId module_id_from_name;
-            if (!ParseModuleIdFromPath(&module_id_from_name, name, name_len, extension_len)) {
+            if (!ParseModuleIdFromPath(std::addressof(module_id_from_name), name, name_len, extension_len)) {
                 return false;
             }
 
-            return std::memcmp(&module_id_from_name, module_id, sizeof(*module_id)) == 0;
+            return std::memcmp(std::addressof(module_id_from_name), module_id, sizeof(*module_id)) == 0;
         }
 
         bool IsIpsFileForModule(const char *name, const ro::ModuleId *module_id) {
diff --git a/libraries/libstratosphere/source/pm/pm_boot_mode_api.cpp b/libraries/libstratosphere/source/pm/pm_boot_mode_api.cpp
index 347d4653e..a4a5db954 100644
--- a/libraries/libstratosphere/source/pm/pm_boot_mode_api.cpp
+++ b/libraries/libstratosphere/source/pm/pm_boot_mode_api.cpp
@@ -21,7 +21,7 @@ namespace ams::pm::bm {
     /* Both functions should be weakly linked, so that they can be overridden by ams::boot2 as needed. */
     BootMode WEAK_SYMBOL GetBootMode() {
         PmBootMode boot_mode = PmBootMode_Normal;
-        R_ABORT_UNLESS(pmbmGetBootMode(&boot_mode));
+        R_ABORT_UNLESS(pmbmGetBootMode(std::addressof(boot_mode)));
         return static_cast<BootMode>(boot_mode);
     }
 
diff --git a/libraries/libstratosphere/source/pm/pm_dmnt_api.cpp b/libraries/libstratosphere/source/pm/pm_dmnt_api.cpp
index faed95bfa..fd382ada7 100644
--- a/libraries/libstratosphere/source/pm/pm_dmnt_api.cpp
+++ b/libraries/libstratosphere/source/pm/pm_dmnt_api.cpp
@@ -34,7 +34,7 @@ namespace ams::pm::dmnt {
 
     Result HookToCreateApplicationProcess(os::NativeHandle *out_handle) {
         Event evt;
-        R_TRY(pmdmntHookToCreateApplicationProcess(&evt));
+        R_TRY(pmdmntHookToCreateApplicationProcess(std::addressof(evt)));
         *out_handle = evt.revent;
         return ResultSuccess();
     }
diff --git a/libraries/libstratosphere/source/pm/pm_info_api.cpp b/libraries/libstratosphere/source/pm/pm_info_api.cpp
index 5a13daff7..d46fad90f 100644
--- a/libraries/libstratosphere/source/pm/pm_info_api.cpp
+++ b/libraries/libstratosphere/source/pm/pm_info_api.cpp
@@ -36,7 +36,7 @@ namespace ams::pm::info {
 
     bool HasLaunchedBootProgram(ncm::ProgramId program_id) {
         bool has_launched = false;
-        R_ABORT_UNLESS(HasLaunchedBootProgram(&has_launched, program_id));
+        R_ABORT_UNLESS(HasLaunchedBootProgram(std::addressof(has_launched), program_id));
         return has_launched;
     }
 
@@ -44,7 +44,7 @@ namespace ams::pm::info {
     Result IsHblProcessId(bool *out, os::ProcessId process_id) {
         ncm::ProgramLocation loc;
         cfg::OverrideStatus override_status;
-        R_TRY(GetProcessInfo(&loc, &override_status, process_id));
+        R_TRY(GetProcessInfo(std::addressof(loc), std::addressof(override_status), process_id));
 
         *out = override_status.IsHbl();
         return ResultSuccess();
@@ -52,7 +52,7 @@ namespace ams::pm::info {
 
     Result IsHblProgramId(bool *out, ncm::ProgramId program_id) {
         os::ProcessId process_id;
-        R_TRY(GetProcessId(&process_id, program_id));
+        R_TRY(GetProcessId(std::addressof(process_id), program_id));
 
         return IsHblProcessId(out, process_id);
     }
diff --git a/libraries/libstratosphere/source/pm/pm_info_api_weak.cpp b/libraries/libstratosphere/source/pm/pm_info_api_weak.cpp
index 3784e3549..56f72787b 100644
--- a/libraries/libstratosphere/source/pm/pm_info_api_weak.cpp
+++ b/libraries/libstratosphere/source/pm/pm_info_api_weak.cpp
@@ -21,7 +21,7 @@ namespace ams::pm::info {
     /* Information API. */
     Result WEAK_SYMBOL HasLaunchedBootProgram(bool *out, ncm::ProgramId program_id) {
         bool has_launched = false;
-        R_TRY(pminfoAtmosphereHasLaunchedBootProgram(&has_launched, static_cast<u64>(program_id)));
+        R_TRY(pminfoAtmosphereHasLaunchedBootProgram(std::addressof(has_launched), static_cast<u64>(program_id)));
         *out = has_launched;
         return ResultSuccess();
     }
diff --git a/libraries/libstratosphere/source/pm/pm_shell_api.cpp b/libraries/libstratosphere/source/pm/pm_shell_api.cpp
index 862e6b0b7..1d3622642 100644
--- a/libraries/libstratosphere/source/pm/pm_shell_api.cpp
+++ b/libraries/libstratosphere/source/pm/pm_shell_api.cpp
@@ -21,7 +21,7 @@ namespace ams::pm::shell {
     Result WEAK_SYMBOL LaunchProgram(os::ProcessId *out, const ncm::ProgramLocation &loc, u32 launch_flags) {
         static_assert(sizeof(ncm::ProgramLocation) == sizeof(NcmProgramLocation));
         static_assert(alignof(ncm::ProgramLocation) == alignof(NcmProgramLocation));
-        return pmshellLaunchProgram(launch_flags, reinterpret_cast<const NcmProgramLocation *>(&loc), reinterpret_cast<u64 *>(out));
+        return pmshellLaunchProgram(launch_flags, reinterpret_cast<const NcmProgramLocation *>(std::addressof(loc)), reinterpret_cast<u64 *>(out));
     }
 
     Result TerminateProcess(os::ProcessId process_id) {
diff --git a/libraries/libstratosphere/source/sf/cmif/sf_cmif_domain_manager.cpp b/libraries/libstratosphere/source/sf/cmif/sf_cmif_domain_manager.cpp
index 83d14b253..b882ea080 100644
--- a/libraries/libstratosphere/source/sf/cmif/sf_cmif_domain_manager.cpp
+++ b/libraries/libstratosphere/source/sf/cmif/sf_cmif_domain_manager.cpp
@@ -19,7 +19,7 @@ namespace ams::sf::cmif {
 
     ServerDomainManager::Domain::~Domain() {
         while (!this->entries.empty()) {
-            Entry *entry = &this->entries.front();
+            Entry *entry = std::addressof(this->entries.front());
             {
                 std::scoped_lock lk(this->manager->entry_owner_lock);
                 AMS_ABORT_UNLESS(entry->owner == this);
@@ -127,7 +127,7 @@ namespace ams::sf::cmif {
             return nullptr;
         }
 
-        Entry *e = &this->free_list.front();
+        Entry *e = std::addressof(this->free_list.front());
         this->free_list.pop_front();
         return e;
     }
diff --git a/libraries/libstratosphere/source/sf/cmif/sf_cmif_domain_service_object.cpp b/libraries/libstratosphere/source/sf/cmif/sf_cmif_domain_service_object.cpp
index 1be7e2962..ae4c81a47 100644
--- a/libraries/libstratosphere/source/sf/cmif/sf_cmif_domain_service_object.cpp
+++ b/libraries/libstratosphere/source/sf/cmif/sf_cmif_domain_service_object.cpp
@@ -43,9 +43,9 @@ namespace ams::sf::cmif {
                 std::memcpy(in_object_ids, reinterpret_cast<DomainObjectId *>(in_message_raw_data.GetAddress() + in_message_raw_data.GetSize()), sizeof(DomainObjectId) * in_header->num_in_objects);
                 DomainServiceObjectProcessor domain_processor(domain, in_object_ids, in_header->num_in_objects);
                 if (ctx.processor == nullptr) {
-                    ctx.processor = &domain_processor;
+                    ctx.processor = std::addressof(domain_processor);
                 } else {
-                    ctx.processor->SetImplementationProcessor(&domain_processor);
+                    ctx.processor->SetImplementationProcessor(std::addressof(domain_processor));
                 }
                 ctx.srv_obj = target_object.GetServiceObjectUnsafe();
                 return target_object.ProcessMessage(ctx, in_message_raw_data);
@@ -82,9 +82,9 @@ namespace ams::sf::cmif {
                 std::memcpy(in_object_ids, reinterpret_cast<DomainObjectId *>(in_message_raw_data.GetAddress() + in_message_raw_data.GetSize()), sizeof(DomainObjectId) * in_header->num_in_objects);
                 DomainServiceObjectProcessor domain_processor(domain, in_object_ids, in_header->num_in_objects);
                 if (ctx.processor == nullptr) {
-                    ctx.processor = &domain_processor;
+                    ctx.processor = std::addressof(domain_processor);
                 } else {
-                    ctx.processor->SetImplementationProcessor(&domain_processor);
+                    ctx.processor->SetImplementationProcessor(std::addressof(domain_processor));
                 }
                 ctx.srv_obj = target_object.GetServiceObjectUnsafe();
                 return target_object.ProcessMessage(ctx, in_message_raw_data);
diff --git a/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_domain_session_manager.cpp b/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_domain_session_manager.cpp
index 7b5b5fc66..038de40dd 100644
--- a/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_domain_session_manager.cpp
+++ b/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_domain_session_manager.cpp
@@ -79,7 +79,7 @@ namespace ams::sf::hipc {
 
                         /* The object ID reservation cannot fail here, as that would cause desynchronization from target domain. */
                         object_id = cmif::DomainObjectId{session->forward_service->object_id};
-                        domain->ReserveSpecificIds(&object_id, 1);
+                        domain->ReserveSpecificIds(std::addressof(object_id), 1);
 
                         /* Register the object. */
                         domain->RegisterObject(object_id, std::move(session->srv_obj_holder));
@@ -91,7 +91,7 @@ namespace ams::sf::hipc {
                         SharedPointer<cmif::DomainServiceObject> cmif_domain(domain, false);
 
                         /* Reserve a new object in the domain. */
-                        R_TRY(domain->ReserveIds(&object_id, 1));
+                        R_TRY(domain->ReserveIds(std::addressof(object_id), 1));
 
                         /* Register the object. */
                         domain->RegisterObject(object_id, std::move(session->srv_obj_holder));
@@ -136,7 +136,7 @@ namespace ams::sf::hipc {
                     } else {
                         /* Copy from the target domain. */
                         os::NativeHandle new_forward_target;
-                        R_TRY(cmifCopyFromCurrentDomain(this->session->forward_service->session, object_id.value, &new_forward_target));
+                        R_TRY(cmifCopyFromCurrentDomain(this->session->forward_service->session, object_id.value, std::addressof(new_forward_target)));
 
                         /* Create new session handles. */
                         os::NativeHandle server_handle, client_handle;
diff --git a/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_manager.cpp b/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_manager.cpp
index f5823ba5a..7b5ecb0b0 100644
--- a/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_manager.cpp
+++ b/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_manager.cpp
@@ -21,7 +21,7 @@ namespace ams::sf::hipc {
     Result ServerManagerBase::InstallMitmServerImpl(os::NativeHandle *out_port_handle, sm::ServiceName service_name, ServerManagerBase::MitmQueryFunction query_func) {
         /* Install the Mitm. */
         os::NativeHandle query_handle;
-        R_TRY(sm::mitm::InstallMitm(out_port_handle, &query_handle, service_name));
+        R_TRY(sm::mitm::InstallMitm(out_port_handle, std::addressof(query_handle), service_name));
 
         /* Register the query handle. */
         impl::RegisterMitmQueryHandle(query_handle, query_func);
@@ -57,9 +57,9 @@ namespace ams::sf::hipc {
         while (true) {
             this->LinkDeferred();
             auto selected = os::WaitAny(std::addressof(this->multi_wait));
-            if (selected == &this->request_stop_event_holder) {
+            if (selected == std::addressof(this->request_stop_event_holder)) {
                 return nullptr;
-            } else if (selected == &this->notify_event_holder) {
+            } else if (selected == std::addressof(this->notify_event_holder)) {
                 this->notify_event.Clear();
             } else {
                 os::UnlinkMultiWaitHolder(selected);
diff --git a/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_session_manager.cpp b/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_session_manager.cpp
index b79a20f5a..9802621d1 100644
--- a/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_session_manager.cpp
+++ b/libraries/libstratosphere/source/sf/hipc/sf_hipc_server_session_manager.cpp
@@ -102,7 +102,7 @@ namespace ams::sf::hipc {
     Result ServerSessionManager::AcceptSessionImpl(ServerSession *session_memory, os::NativeHandle port_handle, cmif::ServiceObjectHolder &&obj) {
         /* Create session handle. */
         os::NativeHandle session_handle;
-        R_TRY(svc::AcceptSession(&session_handle, port_handle));
+        R_TRY(svc::AcceptSession(std::addressof(session_handle), port_handle));
 
         auto session_guard = SCOPE_GUARD { os::CloseNativeHandle(session_handle); };
 
@@ -133,7 +133,7 @@ namespace ams::sf::hipc {
     Result ServerSessionManager::AcceptMitmSessionImpl(ServerSession *session_memory, os::NativeHandle mitm_port_handle, cmif::ServiceObjectHolder &&obj, std::shared_ptr<::Service> &&fsrv) {
         /* Create session handle. */
         os::NativeHandle mitm_session_handle;
-        R_TRY(svc::AcceptSession(&mitm_session_handle, mitm_port_handle));
+        R_TRY(svc::AcceptSession(std::addressof(mitm_session_handle), mitm_port_handle));
 
         auto session_guard = SCOPE_GUARD { os::CloseNativeHandle(mitm_session_handle); };
 
@@ -147,25 +147,25 @@ namespace ams::sf::hipc {
     Result ServerSessionManager::RegisterSession(os::NativeHandle session_handle, cmif::ServiceObjectHolder &&obj) {
         /* We don't actually care about what happens to the session. It'll get linked. */
         ServerSession *session_ptr = nullptr;
-        return this->RegisterSession(&session_ptr, session_handle, std::forward<cmif::ServiceObjectHolder>(obj));
+        return this->RegisterSession(std::addressof(session_ptr), session_handle, std::forward<cmif::ServiceObjectHolder>(obj));
     }
 
     Result ServerSessionManager::AcceptSession(os::NativeHandle port_handle, cmif::ServiceObjectHolder &&obj) {
         /* We don't actually care about what happens to the session. It'll get linked. */
         ServerSession *session_ptr = nullptr;
-        return this->AcceptSession(&session_ptr, port_handle, std::forward<cmif::ServiceObjectHolder>(obj));
+        return this->AcceptSession(std::addressof(session_ptr), port_handle, std::forward<cmif::ServiceObjectHolder>(obj));
     }
 
     Result ServerSessionManager::RegisterMitmSession(os::NativeHandle mitm_session_handle, cmif::ServiceObjectHolder &&obj, std::shared_ptr<::Service> &&fsrv) {
         /* We don't actually care about what happens to the session. It'll get linked. */
         ServerSession *session_ptr = nullptr;
-        return this->RegisterMitmSession(&session_ptr, mitm_session_handle, std::forward<cmif::ServiceObjectHolder>(obj), std::forward<std::shared_ptr<::Service>>(fsrv));
+        return this->RegisterMitmSession(std::addressof(session_ptr), mitm_session_handle, std::forward<cmif::ServiceObjectHolder>(obj), std::forward<std::shared_ptr<::Service>>(fsrv));
     }
 
     Result ServerSessionManager::AcceptMitmSession(os::NativeHandle mitm_port_handle, cmif::ServiceObjectHolder &&obj, std::shared_ptr<::Service> &&fsrv) {
         /* We don't actually care about what happens to the session. It'll get linked. */
         ServerSession *session_ptr = nullptr;
-        return this->AcceptMitmSession(&session_ptr, mitm_port_handle, std::forward<cmif::ServiceObjectHolder>(obj), std::forward<std::shared_ptr<::Service>>(fsrv));
+        return this->AcceptMitmSession(std::addressof(session_ptr), mitm_port_handle, std::forward<cmif::ServiceObjectHolder>(obj), std::forward<std::shared_ptr<::Service>>(fsrv));
     }
 
     Result ServerSessionManager::ReceiveRequestImpl(ServerSession *session, const cmif::PointerAndSize &message) {
@@ -184,7 +184,7 @@ namespace ams::sf::hipc {
                 );
             }
             hipc::ReceiveResult recv_result;
-            R_TRY(hipc::Receive(&recv_result, session->session_handle, message));
+            R_TRY(hipc::Receive(std::addressof(recv_result), session->session_handle, message));
             switch (recv_result) {
                 case hipc::ReceiveResult::Success:
                     session->is_closed = false;
@@ -203,7 +203,7 @@ namespace ams::sf::hipc {
 
         NX_CONSTEXPR u32 GetCmifCommandType(const cmif::PointerAndSize &message) {
             HipcHeader hdr = {};
-            __builtin_memcpy(&hdr, message.GetPointer(), sizeof(hdr));
+            __builtin_memcpy(std::addressof(hdr), message.GetPointer(), sizeof(hdr));
             return hdr.type;
         }
 
@@ -289,7 +289,7 @@ namespace ams::sf::hipc {
             .manager = this,
             .session = session,
             .processor = nullptr, /* Filled in by template implementations. */
-            .handles_to_close = &handles_to_close,
+            .handles_to_close = std::addressof(handles_to_close),
             .pointer_buffer = session->pointer_buffer,
             .in_message_buffer = in_message,
             .out_message_buffer = out_message,
diff --git a/libraries/libstratosphere/source/sm/sm_manager_api.cpp b/libraries/libstratosphere/source/sm/sm_manager_api.cpp
index 296c40858..80372381c 100644
--- a/libraries/libstratosphere/source/sm/sm_manager_api.cpp
+++ b/libraries/libstratosphere/source/sm/sm_manager_api.cpp
@@ -22,7 +22,7 @@ namespace ams::sm::manager {
     /* Manager API. */
     Result RegisterProcess(os::ProcessId process_id, ncm::ProgramId program_id, cfg::OverrideStatus status, const void *acid, size_t acid_size, const void *aci, size_t aci_size) {
         static_assert(sizeof(status) == sizeof(CfgOverrideStatus), "CfgOverrideStatus definition");
-        return smManagerAtmosphereRegisterProcess(static_cast<u64>(process_id), static_cast<u64>(program_id), reinterpret_cast<const CfgOverrideStatus *>(&status), acid, acid_size, aci, aci_size);
+        return smManagerAtmosphereRegisterProcess(static_cast<u64>(process_id), static_cast<u64>(program_id), reinterpret_cast<const CfgOverrideStatus *>(std::addressof(status)), acid, acid_size, aci, aci_size);
     }
 
     Result UnregisterProcess(os::ProcessId process_id) {
diff --git a/libraries/libstratosphere/source/sm/sm_utils.hpp b/libraries/libstratosphere/source/sm/sm_utils.hpp
index 73fcd6eb4..a7d6f6cad 100644
--- a/libraries/libstratosphere/source/sm/sm_utils.hpp
+++ b/libraries/libstratosphere/source/sm/sm_utils.hpp
@@ -40,19 +40,17 @@ namespace ams::sm::impl {
         TipcService srv;
         {
             std::scoped_lock lk(GetPerThreadSessionMutex());
-            R_ABORT_UNLESS(smAtmosphereOpenSession(&srv));
+            R_ABORT_UNLESS(smAtmosphereOpenSession(std::addressof(srv)));
         }
         {
-            ON_SCOPE_EXIT { smAtmosphereCloseSession(&srv); };
-            return f(&srv);
+            ON_SCOPE_EXIT { smAtmosphereCloseSession(std::addressof(srv)); };
+            return f(std::addressof(srv));
         }
     }
 
-    NX_CONSTEXPR SmServiceName ConvertName(sm::ServiceName name) {
+    constexpr ALWAYS_INLINE SmServiceName ConvertName(sm::ServiceName name) {
         static_assert(sizeof(SmServiceName) == sizeof(sm::ServiceName));
-        SmServiceName ret = {};
-        __builtin_memcpy(&ret, &name, sizeof(sm::ServiceName));
-        return ret;
+        return std::bit_cast<SmServiceName>(name);
     }
 
 }
diff --git a/libraries/libstratosphere/source/spl/smc/spl_smc.cpp b/libraries/libstratosphere/source/spl/smc/spl_smc.cpp
index d531eeb1e..b6416eed0 100644
--- a/libraries/libstratosphere/source/spl/smc/spl_smc.cpp
+++ b/libraries/libstratosphere/source/spl/smc/spl_smc.cpp
@@ -173,13 +173,13 @@ namespace ams::spl::smc {
         svc::SecureMonitorArguments args;
 
         args.r[0] = static_cast<u64>(FunctionId::ReencryptDeviceUniqueData);
-        args.r[1] = reinterpret_cast<u64>(&access_key_dec);
-        args.r[2] = reinterpret_cast<u64>(&access_key_enc);
+        args.r[1] = reinterpret_cast<u64>(std::addressof(access_key_dec));
+        args.r[2] = reinterpret_cast<u64>(std::addressof(access_key_enc));
         args.r[3] = option;
         args.r[4] = reinterpret_cast<u64>(data);
         args.r[5] = size;
-        args.r[6] = reinterpret_cast<u64>(&source_dec);
-        args.r[7] = reinterpret_cast<u64>(&source_enc);
+        args.r[6] = reinterpret_cast<u64>(std::addressof(source_dec));
+        args.r[7] = reinterpret_cast<u64>(std::addressof(source_enc));
         svc::CallSecureMonitor(std::addressof(args));
 
         return static_cast<Result>(args.r[0]);
diff --git a/libraries/libstratosphere/source/updater/updater_api.cpp b/libraries/libstratosphere/source/updater/updater_api.cpp
index 95f65cb06..98d600655 100644
--- a/libraries/libstratosphere/source/updater/updater_api.cpp
+++ b/libraries/libstratosphere/source/updater/updater_api.cpp
@@ -112,7 +112,7 @@ namespace ams::updater {
         Result VerifyBootImagesAndRepairIfNeeded(bool *out_repaired, BootModeType mode, void *work_buffer, size_t work_buffer_size, BootImageUpdateType boot_image_update_type) {
             /* Get system data id for boot images (819/81A/81B/81C). */
             ncm::SystemDataId bip_data_id = {};
-            R_TRY(GetBootImagePackageId(&bip_data_id, mode, work_buffer, work_buffer_size));
+            R_TRY(GetBootImagePackageId(std::addressof(bip_data_id), mode, work_buffer, work_buffer_size));
 
             /* Verify the boot images in NAND. */
             R_TRY_CATCH(VerifyBootImages(bip_data_id, mode, work_buffer, work_buffer_size, boot_image_update_type)) {
@@ -174,7 +174,7 @@ namespace ams::updater {
                 R_TRY(ValidateBctFileHash(boot0_accessor, Boot0Partition::BctNormalSub, nand_hash, work_buffer, work_buffer_size, boot_image_update_type));
 
                 /* Compare Package1 Normal/Sub hashes. */
-                R_TRY(GetFileHash(&size, file_hash, GetPackage1Path(boot_image_update_type), work_buffer, work_buffer_size));
+                R_TRY(GetFileHash(std::addressof(size), file_hash, GetPackage1Path(boot_image_update_type), work_buffer, work_buffer_size));
 
                 R_TRY(boot0_accessor.GetHash(nand_hash, size, work_buffer, work_buffer_size, Boot0Partition::Package1NormalMain));
                 R_TRY(CompareHash(file_hash, nand_hash, sizeof(file_hash)));
@@ -183,7 +183,7 @@ namespace ams::updater {
                 R_TRY(CompareHash(file_hash, nand_hash, sizeof(file_hash)));
 
                 /* Compare Package2 Normal/Sub hashes. */
-                R_TRY(GetFileHash(&size, file_hash, GetPackage2Path(boot_image_update_type), work_buffer, work_buffer_size));
+                R_TRY(GetFileHash(std::addressof(size), file_hash, GetPackage2Path(boot_image_update_type), work_buffer, work_buffer_size));
 
                 R_TRY(GetPackage2Hash(nand_hash, size, work_buffer, work_buffer_size, Package2Type::NormalMain));
                 R_TRY(CompareHash(file_hash, nand_hash, sizeof(file_hash)));
@@ -236,7 +236,7 @@ namespace ams::updater {
                 R_TRY(ValidateBctFileHash(boot0_accessor, Boot0Partition::BctSafeSub, nand_hash, work_buffer, work_buffer_size, boot_image_update_type));
 
                 /* Compare Package1 Normal/Sub hashes. */
-                R_TRY(GetFileHash(&size, file_hash, GetPackage1Path(boot_image_update_type), work_buffer, work_buffer_size));
+                R_TRY(GetFileHash(std::addressof(size), file_hash, GetPackage1Path(boot_image_update_type), work_buffer, work_buffer_size));
 
                 R_TRY(boot1_accessor.GetHash(nand_hash, size, work_buffer, work_buffer_size, Boot1Partition::Package1SafeMain));
                 R_TRY(CompareHash(file_hash, nand_hash, sizeof(file_hash)));
@@ -245,7 +245,7 @@ namespace ams::updater {
                 R_TRY(CompareHash(file_hash, nand_hash, sizeof(file_hash)));
 
                 /* Compare Package2 Normal/Sub hashes. */
-                R_TRY(GetFileHash(&size, file_hash, GetPackage2Path(boot_image_update_type), work_buffer, work_buffer_size));
+                R_TRY(GetFileHash(std::addressof(size), file_hash, GetPackage2Path(boot_image_update_type), work_buffer, work_buffer_size));
 
                 R_TRY(GetPackage2Hash(nand_hash, size, work_buffer, work_buffer_size, Package2Type::SafeMain));
                 R_TRY(CompareHash(file_hash, nand_hash, sizeof(file_hash)));
@@ -291,7 +291,7 @@ namespace ams::updater {
                     void *work = reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(work_buffer) + BctSize);
 
                     size_t size;
-                    R_TRY(ReadFile(&size, bct, BctSize, GetBctPath(boot_image_update_type)));
+                    R_TRY(ReadFile(std::addressof(size), bct, BctSize, GetBctPath(boot_image_update_type)));
                     if (HasEks(boot_image_update_type)) {
                         R_TRY(boot0_accessor.UpdateEks(bct, work));
                     }
@@ -361,7 +361,7 @@ namespace ams::updater {
                     void *work = reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(work_buffer) + BctSize);
 
                     size_t size;
-                    R_TRY(ReadFile(&size, bct, BctSize, GetBctPath(boot_image_update_type)));
+                    R_TRY(ReadFile(std::addressof(size), bct, BctSize, GetBctPath(boot_image_update_type)));
                     if (HasEks(boot_image_update_type)) {
                         R_TRY(boot0_accessor.UpdateEks(bct, work));
                     }
@@ -419,7 +419,7 @@ namespace ams::updater {
             void *work = reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(work_buffer) + BctSize);
 
             size_t size;
-            R_TRY(ReadFile(&size, bct, BctSize, GetBctPath(boot_image_update_type)));
+            R_TRY(ReadFile(std::addressof(size), bct, BctSize, GetBctPath(boot_image_update_type)));
             if (HasEks(boot_image_update_type)) {
                 R_TRY(accessor.UpdateEks(bct, work));
             }
@@ -541,7 +541,7 @@ namespace ams::updater {
 
         /* Get verification state from NAND. */
         VerificationState verification_state;
-        R_TRY(GetVerificationState(&verification_state, work_buffer, work_buffer_size));
+        R_TRY(GetVerificationState(std::addressof(verification_state), work_buffer, work_buffer_size));
 
         /* If we don't need to verify anything, we're done. */
         if (!verification_state.needs_verify_normal && !verification_state.needs_verify_safe) {
diff --git a/libraries/libstratosphere/source/updater/updater_bis_management.hpp b/libraries/libstratosphere/source/updater/updater_bis_management.hpp
index 90d5ae751..674259cfb 100644
--- a/libraries/libstratosphere/source/updater/updater_bis_management.hpp
+++ b/libraries/libstratosphere/source/updater/updater_bis_management.hpp
@@ -127,7 +127,7 @@ namespace ams::updater {
                 const OffsetSizeType *entry = nullptr;
                 for (size_t i = 0; i < Meta::NumEntries; i++) {
                     if (Meta::Entries[i].which == which) {
-                        entry = &Meta::Entries[i];
+                        entry = std::addressof(Meta::Entries[i]);
                         break;
                     }
                 }
diff --git a/libraries/libstratosphere/source/util/util_ini.cpp b/libraries/libstratosphere/source/util/util_ini.cpp
index 8b1b73b74..3da840291 100644
--- a/libraries/libstratosphere/source/util/util_ini.cpp
+++ b/libraries/libstratosphere/source/util/util_ini.cpp
@@ -115,12 +115,12 @@ namespace ams::util::ini {
 
     int ParseFile(fs::FileHandle file, void *user_ctx, Handler h) {
         FileContext ctx(file);
-        return ini_parse_stream(ini_reader_file_handle, &ctx, h, user_ctx);
+        return ini_parse_stream(ini_reader_file_handle, std::addressof(ctx), h, user_ctx);
     }
 
     int ParseFile(fs::fsa::IFile *file, void *user_ctx, Handler h) {
         IFileContext ctx(file);
-        return ini_parse_stream(ini_reader_ifile, &ctx, h, user_ctx);
+        return ini_parse_stream(ini_reader_ifile, std::addressof(ctx), h, user_ctx);
     }
 
 }
\ No newline at end of file
diff --git a/libraries/libvapours/include/vapours/util/util_intrusive_list.hpp b/libraries/libvapours/include/vapours/util/util_intrusive_list.hpp
index 655ec3f79..f87ce0de1 100644
--- a/libraries/libvapours/include/vapours/util/util_intrusive_list.hpp
+++ b/libraries/libvapours/include/vapours/util/util_intrusive_list.hpp
@@ -200,23 +200,23 @@ namespace ams::util {
                 }
 
                 ALWAYS_INLINE iterator end() {
-                    return iterator(&this->root_node);
+                    return iterator(std::addressof(this->root_node));
                 }
 
                 ALWAYS_INLINE const_iterator end() const {
-                    return const_iterator(&this->root_node);
+                    return const_iterator(std::addressof(this->root_node));
                 }
 
                 ALWAYS_INLINE iterator iterator_to(reference v) {
                     /* Only allow iterator_to for values in lists. */
                     AMS_ASSERT(v.IsLinked());
-                    return iterator(&v);
+                    return iterator(std::addressof(v));
                 }
 
                 ALWAYS_INLINE const_iterator iterator_to(const_reference v) const {
                     /* Only allow iterator_to for values in lists. */
                     AMS_ASSERT(v.IsLinked());
-                    return const_iterator(&v);
+                    return const_iterator(std::addressof(v));
                 }
 
                 /* Content management. */
@@ -245,11 +245,11 @@ namespace ams::util {
                 }
 
                 ALWAYS_INLINE void push_back(reference node) {
-                    this->root_node.LinkPrev(&node);
+                    this->root_node.LinkPrev(std::addressof(node));
                 }
 
                 ALWAYS_INLINE void push_front(reference node) {
-                    this->root_node.LinkNext(&node);
+                    this->root_node.LinkNext(std::addressof(node));
                 }
 
                 ALWAYS_INLINE void pop_back() {
@@ -261,8 +261,8 @@ namespace ams::util {
                 }
 
                 ALWAYS_INLINE iterator insert(const_iterator pos, reference node) {
-                    pos.GetNonConstIterator()->LinkPrev(&node);
-                    return iterator(&node);
+                    pos.GetNonConstIterator()->LinkPrev(std::addressof(node));
+                    return iterator(std::addressof(node));
                 }
 
                 ALWAYS_INLINE void splice(const_iterator pos, IntrusiveListImpl &o) {
@@ -303,8 +303,8 @@ namespace ams::util {
                     iterator pos(_pos.GetNonConstIterator());
                     iterator first(_first.GetNonConstIterator());
                     iterator last(_last.GetNonConstIterator());
-                    first->Unlink(&*last);
-                    pos->SplicePrev(&*first, &*first);
+                    first->Unlink(std::addressof(*last));
+                    pos->SplicePrev(std::addressof(*first), std::addressof(*first));
                 }
 
         };
@@ -362,7 +362,7 @@ namespace ams::util {
                     }
 
                     ALWAYS_INLINE pointer operator->() const {
-                        return &Traits::GetParent(*this->iterator);
+                        return std::addressof(Traits::GetParent(*this->iterator));
                     }
 
                     ALWAYS_INLINE reference operator*() const {
@@ -562,11 +562,11 @@ namespace ams::util {
             }
 
             static constexpr ALWAYS_INLINE Derived &GetParent(IntrusiveListNode &node) {
-                return util::GetParentReference<Member, Derived>(&node);
+                return util::GetParentReference<Member, Derived>(std::addressof(node));
             }
 
             static constexpr ALWAYS_INLINE Derived const &GetParent(IntrusiveListNode const &node) {
-                return util::GetParentReference<Member, Derived>(&node);
+                return util::GetParentReference<Member, Derived>(std::addressof(node));
             }
         private:
             static constexpr TypedStorage<Derived> DerivedStorage = {};
@@ -597,11 +597,11 @@ namespace ams::util {
             }
 
             static constexpr ALWAYS_INLINE Derived &GetParent(IntrusiveListNode &node) {
-                return util::GetParentReference<Member, Derived>(&node);
+                return util::GetParentReference<Member, Derived>(std::addressof(node));
             }
 
             static constexpr ALWAYS_INLINE Derived const &GetParent(IntrusiveListNode const &node) {
-                return util::GetParentReference<Member, Derived>(&node);
+                return util::GetParentReference<Member, Derived>(std::addressof(node));
             }
     };
 
diff --git a/libraries/libvapours/include/vapours/util/util_tinymt.hpp b/libraries/libvapours/include/vapours/util/util_tinymt.hpp
index a3d194204..94c1adf28 100644
--- a/libraries/libvapours/include/vapours/util/util_tinymt.hpp
+++ b/libraries/libvapours/include/vapours/util/util_tinymt.hpp
@@ -130,14 +130,14 @@ namespace ams::util {
                 {
                     const int num_init_iterations = std::max(seed_count + 1, MinimumInitIterations) - 1;
 
-                    GenerateInitialValuePlus(&this->state, 0, seed_count);
+                    GenerateInitialValuePlus(std::addressof(this->state), 0, seed_count);
 
                     for (int i = 0; i < num_init_iterations; i++) {
-                        GenerateInitialValuePlus(&this->state, (i + 1) % NumStateWords, (i < seed_count) ? seed[i] : 0);
+                        GenerateInitialValuePlus(std::addressof(this->state), (i + 1) % NumStateWords, (i < seed_count) ? seed[i] : 0);
                     }
 
                     for (int i = 0; i < static_cast<int>(NumStateWords); i++) {
-                        GenerateInitialValueXor(&this->state, (i + 1 + num_init_iterations) % NumStateWords);
+                        GenerateInitialValueXor(std::addressof(this->state), (i + 1 + num_init_iterations) % NumStateWords);
                     }
                 }
 
@@ -163,7 +163,7 @@ namespace ams::util {
                 /* Make sure we're aligned. */
                 if (start < aligned_start) {
                     const u32 rnd = this->GenerateRandomU32();
-                    std::memcpy(dst, &rnd, aligned_start - start);
+                    std::memcpy(dst, std::addressof(rnd), aligned_start - start);
                 }
 
                 /* Write as many aligned u32s as we can. */
@@ -179,7 +179,7 @@ namespace ams::util {
                 /* Handle any leftover unaligned data. */
                 if (aligned_end < end) {
                     const u32 rnd = this->GenerateRandomU32();
-                    std::memcpy(reinterpret_cast<void *>(aligned_end), &rnd, end - aligned_end);
+                    std::memcpy(reinterpret_cast<void *>(aligned_end), std::addressof(rnd), end - aligned_end);
                 }
             }
 
diff --git a/libraries/libvapours/source/crypto/impl/crypto_bignum_operations.cpp b/libraries/libvapours/source/crypto/impl/crypto_bignum_operations.cpp
index 5e58088e1..31371663d 100644
--- a/libraries/libvapours/source/crypto/impl/crypto_bignum_operations.cpp
+++ b/libraries/libvapours/source/crypto/impl/crypto_bignum_operations.cpp
@@ -257,7 +257,7 @@ namespace ams::crypto::impl {
         if (!(power_1.IsValid() && power_2.IsValid() && power_3.IsValid())) {
             return false;
         }
-        decltype(power_1)* powers[3] = { &power_1, &power_2, &power_3 };
+        decltype(power_1)* powers[3] = { std::addressof(power_1), std::addressof(power_2), std::addressof(power_3) };
 
         /* Set the powers of src. */
         Copy(power_1.GetBuffer(), src, mod_words);
diff --git a/libraries/libvapours/source/dd/dd_io_mapping.cpp b/libraries/libvapours/source/dd/dd_io_mapping.cpp
index efc8127ae..b549b99a4 100644
--- a/libraries/libvapours/source/dd/dd_io_mapping.cpp
+++ b/libraries/libvapours/source/dd/dd_io_mapping.cpp
@@ -68,13 +68,13 @@ namespace ams::dd {
 
             if (hos::GetVersion() >= hos::Version_10_0_0) {
                 svc::Size region_size = 0;
-                R_TRY_CATCH(svc::QueryIoMapping(&virt_addr, &region_size, aligned_addr, aligned_size)) {
+                R_TRY_CATCH(svc::QueryIoMapping(std::addressof(virt_addr), std::addressof(region_size), aligned_addr, aligned_size)) {
                     /* Official software handles this by returning 0. */
                     R_CATCH(svc::ResultNotFound) { return 0; }
                 } R_END_TRY_CATCH_WITH_ABORT_UNLESS;
                 AMS_ASSERT(region_size >= aligned_size);
             } else {
-                R_TRY_CATCH(svc::LegacyQueryIoMapping(&virt_addr, aligned_addr, aligned_size)) {
+                R_TRY_CATCH(svc::LegacyQueryIoMapping(std::addressof(virt_addr), aligned_addr, aligned_size)) {
                     /* Official software handles this by returning 0. */
                     R_CATCH(svc::ResultNotFound) { return 0; }
                 } R_END_TRY_CATCH_WITH_ABORT_UNLESS;
@@ -102,7 +102,7 @@ namespace ams::dd {
 
                 u32 ReadWritePmcRegisterImpl(dd::PhysicalAddress phys_addr, u32 value, u32 mask) {
                     u32 out_value;
-                    R_ABORT_UNLESS(spl::smc::ConvertResult(spl::smc::AtmosphereReadWriteRegister(phys_addr, mask, value, &out_value)));
+                    R_ABORT_UNLESS(spl::smc::ConvertResult(spl::smc::AtmosphereReadWriteRegister(phys_addr, mask, value, std::addressof(out_value))));
                     return out_value;
                 }
 
diff --git a/stratosphere/ams_mitm/source/amsmitm_fs_utils.cpp b/stratosphere/ams_mitm/source/amsmitm_fs_utils.cpp
index 70521bc32..5dda00fc0 100644
--- a/stratosphere/ams_mitm/source/amsmitm_fs_utils.cpp
+++ b/stratosphere/ams_mitm/source/amsmitm_fs_utils.cpp
@@ -28,7 +28,7 @@ namespace ams::mitm::fs {
 
         /* Helpers. */
         Result EnsureSdInitialized() {
-            R_UNLESS(serviceIsActive(&g_sd_filesystem.s), ams::fs::ResultSdCardNotPresent());
+            R_UNLESS(serviceIsActive(std::addressof(g_sd_filesystem.s)), ams::fs::ResultSdCardNotPresent());
             return ResultSuccess();
         }
 
@@ -39,17 +39,17 @@ namespace ams::mitm::fs {
     }
 
     void OpenGlobalSdCardFileSystem() {
-        R_ABORT_UNLESS(fsOpenSdCardFileSystem(&g_sd_filesystem));
+        R_ABORT_UNLESS(fsOpenSdCardFileSystem(std::addressof(g_sd_filesystem)));
     }
 
     Result CreateSdFile(const char *path, s64 size, s32 option) {
         R_TRY(EnsureSdInitialized());
-        return fsFsCreateFile(&g_sd_filesystem, path, size, option);
+        return fsFsCreateFile(std::addressof(g_sd_filesystem), path, size, option);
     }
 
     Result DeleteSdFile(const char *path) {
         R_TRY(EnsureSdInitialized());
-        return fsFsDeleteFile(&g_sd_filesystem, path);
+        return fsFsDeleteFile(std::addressof(g_sd_filesystem), path);
     }
 
     bool HasSdFile(const char *path) {
@@ -58,7 +58,7 @@ namespace ams::mitm::fs {
         }
 
         FsDirEntryType type;
-        if (R_FAILED(fsFsGetEntryType(&g_sd_filesystem, path, &type))) {
+        if (R_FAILED(fsFsGetEntryType(std::addressof(g_sd_filesystem), path, std::addressof(type)))) {
             return false;
         }
 
@@ -85,7 +85,7 @@ namespace ams::mitm::fs {
 
     Result OpenSdFile(FsFile *out, const char *path, u32 mode) {
         R_TRY(EnsureSdInitialized());
-        return fsFsOpenFile(&g_sd_filesystem, path, mode, out);
+        return fsFsOpenFile(std::addressof(g_sd_filesystem), path, mode, out);
     }
 
     Result OpenAtmosphereSdFile(FsFile *out, const char *path, u32 mode) {
@@ -114,7 +114,7 @@ namespace ams::mitm::fs {
 
     Result CreateSdDirectory(const char *path) {
         R_TRY(EnsureSdInitialized());
-        return fsFsCreateDirectory(&g_sd_filesystem, path);
+        return fsFsCreateDirectory(std::addressof(g_sd_filesystem), path);
     }
 
     Result CreateAtmosphereSdDirectory(const char *path) {
@@ -125,7 +125,7 @@ namespace ams::mitm::fs {
 
     Result OpenSdDirectory(FsDir *out, const char *path, u32 mode) {
         R_TRY(EnsureSdInitialized());
-        return fsFsOpenDirectory(&g_sd_filesystem, path, mode, out);
+        return fsFsOpenDirectory(std::addressof(g_sd_filesystem), path, mode, out);
     }
 
     Result OpenAtmosphereSdDirectory(FsDir *out, const char *path, u32 mode) {
@@ -188,22 +188,22 @@ namespace ams::mitm::fs {
         /* Check if romfs.bin is present. */
         {
             FsFile romfs_file;
-            if (R_SUCCEEDED(OpenAtmosphereSdFile(&romfs_file, program_id, "romfs.bin", OpenMode_Read))) {
-                fsFileClose(&romfs_file);
+            if (R_SUCCEEDED(OpenAtmosphereSdFile(std::addressof(romfs_file), program_id, "romfs.bin", OpenMode_Read))) {
+                fsFileClose(std::addressof(romfs_file));
                 return true;
             }
         }
 
         /* Check for romfs folder with content. */
         FsDir romfs_dir;
-        if (R_FAILED(OpenAtmosphereSdRomfsDirectory(&romfs_dir, program_id, "", OpenDirectoryMode_All))) {
+        if (R_FAILED(OpenAtmosphereSdRomfsDirectory(std::addressof(romfs_dir), program_id, "", OpenDirectoryMode_All))) {
             return false;
         }
-        ON_SCOPE_EXIT { fsDirClose(&romfs_dir); };
+        ON_SCOPE_EXIT { fsDirClose(std::addressof(romfs_dir)); };
 
         /* Verify the folder has at least one entry. */
         s64 num_entries = 0;
-        return R_SUCCEEDED(fsDirGetEntryCount(&romfs_dir, &num_entries)) && num_entries > 0;
+        return R_SUCCEEDED(fsDirGetEntryCount(std::addressof(romfs_dir), std::addressof(num_entries))) && num_entries > 0;
     }
 
     Result SaveAtmosphereSdFile(FsFile *out, ncm::ProgramId program_id, const char *path, void *data, size_t size) {
@@ -215,17 +215,17 @@ namespace ams::mitm::fs {
         /* Unconditionally create. */
         /* Don't check error, as a failure here should be okay. */
         FsFile f;
-        fsFsCreateFile(&g_sd_filesystem, fixed_path, size, 0);
+        fsFsCreateFile(std::addressof(g_sd_filesystem), fixed_path, size, 0);
 
         /* Try to open. */
-        R_TRY(fsFsOpenFile(&g_sd_filesystem, fixed_path, OpenMode_ReadWrite, &f));
-        auto file_guard = SCOPE_GUARD { fsFileClose(&f); };
+        R_TRY(fsFsOpenFile(std::addressof(g_sd_filesystem), fixed_path, OpenMode_ReadWrite, std::addressof(f)));
+        auto file_guard = SCOPE_GUARD { fsFileClose(std::addressof(f)); };
 
         /* Try to set the size. */
-        R_TRY(fsFileSetSize(&f, static_cast<s64>(size)));
+        R_TRY(fsFileSetSize(std::addressof(f), static_cast<s64>(size)));
 
         /* Try to write data. */
-        R_TRY(fsFileWrite(&f, 0, data, size, FsWriteOption_Flush));
+        R_TRY(fsFileWrite(std::addressof(f), 0, data, size, FsWriteOption_Flush));
 
         /* Set output. */
         file_guard.Cancel();
@@ -242,14 +242,14 @@ namespace ams::mitm::fs {
         /* Unconditionally create. */
         /* Don't check error, as a failure here should be okay. */
         FsFile f;
-        fsFsCreateFile(&g_sd_filesystem, fixed_path, size, 0);
+        fsFsCreateFile(std::addressof(g_sd_filesystem), fixed_path, size, 0);
 
         /* Try to open. */
-        R_TRY(fsFsOpenFile(&g_sd_filesystem, fixed_path, OpenMode_ReadWrite, &f));
-        auto file_guard = SCOPE_GUARD { fsFileClose(&f); };
+        R_TRY(fsFsOpenFile(std::addressof(g_sd_filesystem), fixed_path, OpenMode_ReadWrite, std::addressof(f)));
+        auto file_guard = SCOPE_GUARD { fsFileClose(std::addressof(f)); };
 
         /* Try to set the size. */
-        R_TRY(fsFileSetSize(&f, static_cast<s64>(size)));
+        R_TRY(fsFileSetSize(std::addressof(f), static_cast<s64>(size)));
 
         /* Set output. */
         file_guard.Cancel();
diff --git a/stratosphere/ams_mitm/source/amsmitm_initialization.cpp b/stratosphere/ams_mitm/source/amsmitm_initialization.cpp
index be4cc51da..f0d08fb72 100644
--- a/stratosphere/ams_mitm/source/amsmitm_initialization.cpp
+++ b/stratosphere/ams_mitm/source/amsmitm_initialization.cpp
@@ -128,9 +128,9 @@ namespace ams::mitm {
                 GetBackupFileName(bis_keys_backup_name, sizeof(bis_keys_backup_name), device_reference, "BISKEYS.bin");
 
                 mitm::fs::CreateAtmosphereSdFile(bis_keys_backup_name, sizeof(bis_keys), ams::fs::CreateOption_None);
-                R_ABORT_UNLESS(mitm::fs::OpenAtmosphereSdFile(&g_bis_key_file, bis_keys_backup_name, ams::fs::OpenMode_ReadWrite));
-                R_ABORT_UNLESS(fsFileSetSize(&g_bis_key_file, sizeof(bis_keys)));
-                R_ABORT_UNLESS(fsFileWrite(&g_bis_key_file, 0, bis_keys, sizeof(bis_keys), FsWriteOption_Flush));
+                R_ABORT_UNLESS(mitm::fs::OpenAtmosphereSdFile(std::addressof(g_bis_key_file), bis_keys_backup_name, ams::fs::OpenMode_ReadWrite));
+                R_ABORT_UNLESS(fsFileSetSize(std::addressof(g_bis_key_file), sizeof(bis_keys)));
+                R_ABORT_UNLESS(fsFileWrite(std::addressof(g_bis_key_file), 0, bis_keys, sizeof(bis_keys), FsWriteOption_Flush));
                 /* NOTE: g_bis_key_file is intentionally not closed here.  This prevents any other process from opening it. */
             }
 
@@ -167,7 +167,7 @@ namespace ams::mitm {
                 if (const char *emummc_file_path = emummc::GetFilePath(); emummc_file_path != nullptr) {
                     char emummc_path[ams::fs::EntryNameLengthMax + 1];
                     util::SNPrintf(emummc_path, sizeof(emummc_path), "%s/eMMC", emummc_file_path);
-                    mitm::fs::OpenSdFile(&g_emummc_file, emummc_path, ams::fs::OpenMode_Read);
+                    mitm::fs::OpenSdFile(std::addressof(g_emummc_file), emummc_path, ams::fs::OpenMode_Read);
                 }
             }
 
diff --git a/stratosphere/ams_mitm/source/amsmitm_prodinfo_utils.cpp b/stratosphere/ams_mitm/source/amsmitm_prodinfo_utils.cpp
index 275daaa97..69740191b 100644
--- a/stratosphere/ams_mitm/source/amsmitm_prodinfo_utils.cpp
+++ b/stratosphere/ams_mitm/source/amsmitm_prodinfo_utils.cpp
@@ -297,28 +297,28 @@ namespace ams::mitm {
 
         void ReadStorageCalibrationBinary(CalibrationInfo *out) {
             FsStorage calibration_binary_storage;
-            R_ABORT_UNLESS(fsOpenBisStorage(&calibration_binary_storage, FsBisPartitionId_CalibrationBinary));
-            ON_SCOPE_EXIT { fsStorageClose(&calibration_binary_storage); };
+            R_ABORT_UNLESS(fsOpenBisStorage(std::addressof(calibration_binary_storage), FsBisPartitionId_CalibrationBinary));
+            ON_SCOPE_EXIT { fsStorageClose(std::addressof(calibration_binary_storage)); };
 
-            R_ABORT_UNLESS(fsStorageRead(&calibration_binary_storage, 0, out, sizeof(*out)));
+            R_ABORT_UNLESS(fsStorageRead(std::addressof(calibration_binary_storage), 0, out, sizeof(*out)));
         }
 
         constexpr inline const u8 SecureCalibrationBinaryBackupIv[crypto::Aes128CtrDecryptor::IvSize] = {};
 
         void ReadStorageEncryptedSecureCalibrationBinaryBackupUnsafe(SecureCalibrationInfoBackup *out) {
             FsStorage calibration_binary_storage;
-            R_ABORT_UNLESS(fsOpenBisStorage(&calibration_binary_storage, FsBisPartitionId_CalibrationBinary));
-            ON_SCOPE_EXIT { fsStorageClose(&calibration_binary_storage); };
+            R_ABORT_UNLESS(fsOpenBisStorage(std::addressof(calibration_binary_storage), FsBisPartitionId_CalibrationBinary));
+            ON_SCOPE_EXIT { fsStorageClose(std::addressof(calibration_binary_storage)); };
 
-            R_ABORT_UNLESS(fsStorageRead(&calibration_binary_storage, SecureCalibrationInfoBackupOffset, out, sizeof(*out)));
+            R_ABORT_UNLESS(fsStorageRead(std::addressof(calibration_binary_storage), SecureCalibrationInfoBackupOffset, out, sizeof(*out)));
         }
 
         void WriteStorageEncryptedSecureCalibrationBinaryBackupUnsafe(const SecureCalibrationInfoBackup *src) {
             FsStorage calibration_binary_storage;
-            R_ABORT_UNLESS(fsOpenBisStorage(&calibration_binary_storage, FsBisPartitionId_CalibrationBinary));
-            ON_SCOPE_EXIT { fsStorageClose(&calibration_binary_storage); };
+            R_ABORT_UNLESS(fsOpenBisStorage(std::addressof(calibration_binary_storage), FsBisPartitionId_CalibrationBinary));
+            ON_SCOPE_EXIT { fsStorageClose(std::addressof(calibration_binary_storage)); };
 
-            R_ABORT_UNLESS(fsStorageWrite(&calibration_binary_storage, SecureCalibrationInfoBackupOffset, src, sizeof(*src)));
+            R_ABORT_UNLESS(fsStorageWrite(std::addressof(calibration_binary_storage), SecureCalibrationInfoBackupOffset, src, sizeof(*src)));
         }
 
         void GenerateSecureCalibrationBinaryBackupKey(void *dst, size_t dst_size) {
diff --git a/stratosphere/ams_mitm/source/bpc_mitm/bpc_ams_power_utils.cpp b/stratosphere/ams_mitm/source/bpc_mitm/bpc_ams_power_utils.cpp
index 6f8d7fe3f..b2e63b84b 100644
--- a/stratosphere/ams_mitm/source/bpc_mitm/bpc_ams_power_utils.cpp
+++ b/stratosphere/ams_mitm/source/bpc_mitm/bpc_ams_power_utils.cpp
@@ -135,13 +135,13 @@ namespace ams::mitm::bpc {
 
         /* Open payload file. */
         FsFile payload_file;
-        R_TRY(fs::OpenAtmosphereSdFile(&payload_file, "/reboot_payload.bin", ams::fs::OpenMode_Read));
-        ON_SCOPE_EXIT { fsFileClose(&payload_file); };
+        R_TRY(fs::OpenAtmosphereSdFile(std::addressof(payload_file), "/reboot_payload.bin", ams::fs::OpenMode_Read));
+        ON_SCOPE_EXIT { fsFileClose(std::addressof(payload_file)); };
 
         /* Read payload file. Discard result. */
         {
             size_t actual_size;
-            fsFileRead(&payload_file, 0, g_reboot_payload, sizeof(g_reboot_payload), FsReadOption_None, &actual_size);
+            fsFileRead(std::addressof(payload_file), 0, g_reboot_payload, sizeof(g_reboot_payload), FsReadOption_None, std::addressof(actual_size));
         }
 
         /* NOTE: Preferred reboot type will be parsed from settings later on. */
diff --git a/stratosphere/ams_mitm/source/bpc_mitm/bpc_ams_service.cpp b/stratosphere/ams_mitm/source/bpc_mitm/bpc_ams_service.cpp
index b9356bdcb..3d7330d5e 100644
--- a/stratosphere/ams_mitm/source/bpc_mitm/bpc_ams_service.cpp
+++ b/stratosphere/ams_mitm/source/bpc_mitm/bpc_ams_service.cpp
@@ -27,7 +27,7 @@ namespace ams::mitm::bpc {
     }
 
     void AtmosphereService::RebootToFatalError(const ams::FatalErrorContext &ctx) {
-        bpc::RebootForFatalError(&ctx);
+        bpc::RebootForFatalError(std::addressof(ctx));
     }
 
     void AtmosphereService::SetRebootPayload(const ams::sf::InBuffer &payload) {
diff --git a/stratosphere/ams_mitm/source/dns_mitm/dnsmitm_resolver_impl.cpp b/stratosphere/ams_mitm/source/dns_mitm/dnsmitm_resolver_impl.cpp
index eda793bbf..6e2af5fb2 100644
--- a/stratosphere/ams_mitm/source/dns_mitm/dnsmitm_resolver_impl.cpp
+++ b/stratosphere/ams_mitm/source/dns_mitm/dnsmitm_resolver_impl.cpp
@@ -24,7 +24,7 @@ namespace ams::mitm::socket::resolver {
 
     ssize_t SerializeRedirectedHostEnt(u8 * const dst, size_t dst_size, const char *hostname, ams::socket::InAddrT redirect_addr) {
         struct in_addr addr = { .s_addr = redirect_addr };
-        struct in_addr *addr_list[2] = { &addr, nullptr };
+        struct in_addr *addr_list[2] = { std::addressof(addr), nullptr };
 
         struct hostent ent = {
             .h_name      = const_cast<char *>(hostname),
diff --git a/stratosphere/ams_mitm/source/fs_mitm/fs_mitm_service.cpp b/stratosphere/ams_mitm/source/fs_mitm/fs_mitm_service.cpp
index 33d2e180e..39d2819b0 100644
--- a/stratosphere/ams_mitm/source/fs_mitm/fs_mitm_service.cpp
+++ b/stratosphere/ams_mitm/source/fs_mitm/fs_mitm_service.cpp
@@ -116,7 +116,7 @@ namespace ams::mitm::fs {
 
         bool GetSettingsItemBooleanValue(const char *name, const char *key) {
             u8 tmp = 0;
-            AMS_ABORT_UNLESS(settings::fwdbg::GetSettingsItemValue(&tmp, sizeof(tmp), name, key) == sizeof(tmp));
+            AMS_ABORT_UNLESS(settings::fwdbg::GetSettingsItemValue(std::addressof(tmp), sizeof(tmp), name, key) == sizeof(tmp));
             return (tmp != 0);
         }
 
@@ -133,20 +133,20 @@ namespace ams::mitm::fs {
         Result OpenHblWebContentFileSystem(sf::Out<sf::SharedPointer<ams::fssrv::sf::IFileSystem>> &out, ncm::ProgramId program_id) {
             /* Verify eligibility. */
             bool is_hbl;
-            R_UNLESS(R_SUCCEEDED(pm::info::IsHblProgramId(&is_hbl, program_id)), sm::mitm::ResultShouldForwardToSession());
+            R_UNLESS(R_SUCCEEDED(pm::info::IsHblProgramId(std::addressof(is_hbl), program_id)), sm::mitm::ResultShouldForwardToSession());
             R_UNLESS(is_hbl,                                                     sm::mitm::ResultShouldForwardToSession());
 
             /* Hbl html directory must exist. */
             {
                 FsDir d;
-                R_UNLESS(R_SUCCEEDED(mitm::fs::OpenSdDirectory(&d, AtmosphereHblWebContentDir, fs::OpenDirectoryMode_Directory)), sm::mitm::ResultShouldForwardToSession());
-                fsDirClose(&d);
+                R_UNLESS(R_SUCCEEDED(mitm::fs::OpenSdDirectory(std::addressof(d), AtmosphereHblWebContentDir, fs::OpenDirectoryMode_Directory)), sm::mitm::ResultShouldForwardToSession());
+                fsDirClose(std::addressof(d));
             }
 
             /* Open the SD card using fs.mitm's session. */
             FsFileSystem sd_fs;
-            R_TRY(fsOpenSdCardFileSystem(&sd_fs));
-            const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(&sd_fs.s)};
+            R_TRY(fsOpenSdCardFileSystem(std::addressof(sd_fs)));
+            const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(std::addressof(sd_fs.s))};
             std::unique_ptr<fs::fsa::IFileSystem> sd_ifs = std::make_unique<fs::RemoteFileSystem>(sd_fs);
 
             out.SetValue(MakeSharedFileSystem(std::make_shared<fs::ReadOnlyFileSystem>(std::make_unique<fssystem::SubDirectoryFileSystem>(std::move(sd_ifs), AtmosphereHblWebContentDir)), false), target_object_id);
@@ -157,14 +157,14 @@ namespace ams::mitm::fs {
             /* Directory must exist. */
             {
                 FsDir d;
-                R_UNLESS(R_SUCCEEDED(mitm::fs::OpenAtmosphereSdDirectory(&d, program_id, ProgramWebContentDir, fs::OpenDirectoryMode_Directory)), sm::mitm::ResultShouldForwardToSession());
-                fsDirClose(&d);
+                R_UNLESS(R_SUCCEEDED(mitm::fs::OpenAtmosphereSdDirectory(std::addressof(d), program_id, ProgramWebContentDir, fs::OpenDirectoryMode_Directory)), sm::mitm::ResultShouldForwardToSession());
+                fsDirClose(std::addressof(d));
             }
 
             /* Open the SD card using fs.mitm's session. */
             FsFileSystem sd_fs;
-            R_TRY(fsOpenSdCardFileSystem(&sd_fs));
-            const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(&sd_fs.s)};
+            R_TRY(fsOpenSdCardFileSystem(std::addressof(sd_fs)));
+            const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(std::addressof(sd_fs.s))};
             std::unique_ptr<fs::fsa::IFileSystem> sd_ifs = std::make_unique<fs::RemoteFileSystem>(sd_fs);
 
             /* Format the subdirectory path. */
@@ -231,8 +231,8 @@ namespace ams::mitm::fs {
 
         /* Create a new SD card filesystem. */
         FsFileSystem sd_fs;
-        R_TRY(fsOpenSdCardFileSystemFwd(this->forward_service.get(), &sd_fs));
-        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(&sd_fs.s)};
+        R_TRY(fsOpenSdCardFileSystemFwd(this->forward_service.get(), std::addressof(sd_fs)));
+        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(std::addressof(sd_fs.s))};
 
         /* Return output filesystem. */
         std::shared_ptr<fs::fsa::IFileSystem> redir_fs = std::make_shared<fssystem::DirectoryRedirectionFileSystem>(std::make_shared<RemoteFileSystem>(sd_fs), "/Nintendo", emummc::GetNintendoDirPath());
@@ -260,13 +260,13 @@ namespace ams::mitm::fs {
         /* Verify we can open the save. */
         static_assert(sizeof(fs::SaveDataAttribute) == sizeof(::FsSaveDataAttribute));
         FsFileSystem save_fs;
-        R_UNLESS(R_SUCCEEDED(fsOpenSaveDataFileSystemFwd(this->forward_service.get(), &save_fs, space_id, reinterpret_cast<const FsSaveDataAttribute *>(&attribute))), sm::mitm::ResultShouldForwardToSession());
+        R_UNLESS(R_SUCCEEDED(fsOpenSaveDataFileSystemFwd(this->forward_service.get(), std::addressof(save_fs), space_id, reinterpret_cast<const FsSaveDataAttribute *>(std::addressof(attribute)))), sm::mitm::ResultShouldForwardToSession());
         std::unique_ptr<fs::fsa::IFileSystem> save_ifs = std::make_unique<fs::RemoteFileSystem>(save_fs);
 
         /* Mount the SD card using fs.mitm's session. */
         FsFileSystem sd_fs;
-        R_TRY(fsOpenSdCardFileSystem(&sd_fs));
-        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(&sd_fs.s)};
+        R_TRY(fsOpenSdCardFileSystem(std::addressof(sd_fs)));
+        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(std::addressof(sd_fs.s))};
         std::shared_ptr<fs::fsa::IFileSystem> sd_ifs = std::make_shared<fs::RemoteFileSystem>(sd_fs);
 
         /* Verify that we can open the save directory, and that it exists. */
@@ -278,7 +278,7 @@ namespace ams::mitm::fs {
         bool is_new_save = false;
         {
             fs::DirectoryEntryType ent;
-            R_TRY_CATCH(sd_ifs->GetEntryType(&ent, save_dir_path)) {
+            R_TRY_CATCH(sd_ifs->GetEntryType(std::addressof(ent), save_dir_path)) {
                 R_CATCH(fs::ResultPathNotFound) { is_new_save = true; }
                 R_CATCH_ALL() { /* ... */ }
             } R_END_TRY_CATCH;
@@ -310,8 +310,8 @@ namespace ams::mitm::fs {
 
         /* Try to open a storage for the partition. */
         FsStorage bis_storage;
-        R_TRY(fsOpenBisStorageFwd(this->forward_service.get(), &bis_storage, bis_partition_id));
-        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(&bis_storage.s)};
+        R_TRY(fsOpenBisStorageFwd(this->forward_service.get(), std::addressof(bis_storage), bis_partition_id));
+        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(std::addressof(bis_storage.s))};
 
         const bool is_sysmodule = ncm::IsSystemProgramId(this->client_info.program_id);
         const bool is_hbl = this->client_info.override_status.IsHbl();
@@ -355,8 +355,8 @@ namespace ams::mitm::fs {
 
         /* Try to open the process romfs. */
         FsStorage data_storage;
-        R_TRY(fsOpenDataStorageByCurrentProcessFwd(this->forward_service.get(), &data_storage));
-        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(&data_storage.s)};
+        R_TRY(fsOpenDataStorageByCurrentProcessFwd(this->forward_service.get(), std::addressof(data_storage)));
+        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(std::addressof(data_storage.s))};
 
         /* Get a scoped lock. */
         std::scoped_lock lk(g_data_storage_lock);
@@ -376,7 +376,7 @@ namespace ams::mitm::fs {
 
             /* Create the layered storage. */
             FsFile data_file;
-            if (R_SUCCEEDED(OpenAtmosphereSdFile(&data_file, this->client_info.program_id, "romfs.bin", OpenMode_Read))) {
+            if (R_SUCCEEDED(OpenAtmosphereSdFile(std::addressof(data_file), this->client_info.program_id, "romfs.bin", OpenMode_Read))) {
                 auto layered_storage = std::make_shared<LayeredRomfsStorage>(std::make_unique<ReadOnlyStorageAdapter>(new RemoteStorage(data_storage)), std::make_unique<ReadOnlyStorageAdapter>(new FileStorage(new RemoteFile(data_file))), this->client_info.program_id);
                 layered_storage->BeginInitialize();
                 new_storage = std::move(layered_storage);
@@ -386,7 +386,7 @@ namespace ams::mitm::fs {
                 new_storage = std::move(layered_storage);
             }
 
-            SetStorageCacheEntry(this->client_info.program_id, &new_storage);
+            SetStorageCacheEntry(this->client_info.program_id, std::addressof(new_storage));
             out.SetValue(MakeSharedStorage(new_storage), target_object_id);
         }
 
@@ -405,8 +405,8 @@ namespace ams::mitm::fs {
 
         /* Try to open the process romfs. */
         FsStorage data_storage;
-        R_TRY(fsOpenDataStorageByDataIdFwd(this->forward_service.get(), &data_storage, static_cast<u64>(data_id), static_cast<NcmStorageId>(storage_id)));
-        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(&data_storage.s)};
+        R_TRY(fsOpenDataStorageByDataIdFwd(this->forward_service.get(), std::addressof(data_storage), static_cast<u64>(data_id), static_cast<NcmStorageId>(storage_id)));
+        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(std::addressof(data_storage.s))};
 
         /* Get a scoped lock. */
         std::scoped_lock lk(g_data_storage_lock);
@@ -426,7 +426,7 @@ namespace ams::mitm::fs {
 
             /* Create the layered storage. */
             FsFile data_file;
-            if (R_SUCCEEDED(OpenAtmosphereSdFile(&data_file, data_id, "romfs.bin", OpenMode_Read))) {
+            if (R_SUCCEEDED(OpenAtmosphereSdFile(std::addressof(data_file), data_id, "romfs.bin", OpenMode_Read))) {
                 auto layered_storage = std::make_shared<LayeredRomfsStorage>(std::make_unique<ReadOnlyStorageAdapter>(new RemoteStorage(data_storage)), std::make_unique<ReadOnlyStorageAdapter>(new FileStorage(new RemoteFile(data_file))), data_id);
                 layered_storage->BeginInitialize();
                 new_storage = std::move(layered_storage);
@@ -436,7 +436,7 @@ namespace ams::mitm::fs {
                 new_storage = std::move(layered_storage);
             }
 
-            SetStorageCacheEntry(data_id, &new_storage);
+            SetStorageCacheEntry(data_id, std::addressof(new_storage));
             out.SetValue(MakeSharedStorage(new_storage), target_object_id);
         }
 
@@ -456,8 +456,8 @@ namespace ams::mitm::fs {
 
         /* Try to open the process romfs. */
         FsStorage data_storage;
-        R_TRY(fsOpenDataStorageWithProgramIndexFwd(this->forward_service.get(), &data_storage, program_index));
-        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(&data_storage.s)};
+        R_TRY(fsOpenDataStorageWithProgramIndexFwd(this->forward_service.get(), std::addressof(data_storage), program_index));
+        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(std::addressof(data_storage.s))};
 
         /* Get a scoped lock. */
         std::scoped_lock lk(g_data_storage_lock);
@@ -477,7 +477,7 @@ namespace ams::mitm::fs {
 
             /* Create the layered storage. */
             FsFile data_file;
-            if (R_SUCCEEDED(OpenAtmosphereSdFile(&data_file, program_id, "romfs.bin", OpenMode_Read))) {
+            if (R_SUCCEEDED(OpenAtmosphereSdFile(std::addressof(data_file), program_id, "romfs.bin", OpenMode_Read))) {
                 auto layered_storage = std::make_shared<LayeredRomfsStorage>(std::make_unique<ReadOnlyStorageAdapter>(new RemoteStorage(data_storage)), std::make_unique<ReadOnlyStorageAdapter>(new FileStorage(new RemoteFile(data_file))), program_id);
                 layered_storage->BeginInitialize();
                 new_storage = std::move(layered_storage);
@@ -487,7 +487,7 @@ namespace ams::mitm::fs {
                 new_storage = std::move(layered_storage);
             }
 
-            SetStorageCacheEntry(program_id, &new_storage);
+            SetStorageCacheEntry(program_id, std::addressof(new_storage));
             out.SetValue(MakeSharedStorage(new_storage), target_object_id);
         }
 
diff --git a/stratosphere/ams_mitm/source/fs_mitm/fsmitm_layered_romfs_storage.cpp b/stratosphere/ams_mitm/source/fs_mitm/fsmitm_layered_romfs_storage.cpp
index 9abf2122f..290c9cbf1 100644
--- a/stratosphere/ams_mitm/source/fs_mitm/fsmitm_layered_romfs_storage.cpp
+++ b/stratosphere/ams_mitm/source/fs_mitm/fsmitm_layered_romfs_storage.cpp
@@ -31,7 +31,7 @@ namespace ams::mitm::fs {
         void RomfsInitializerThreadFunction(void *) {
             while (true) {
                 uintptr_t storage_uptr = 0;
-                g_req_mq.Receive(&storage_uptr);
+                g_req_mq.Receive(std::addressof(storage_uptr));
                 std::shared_ptr<LayeredRomfsStorage> layered_storage = reinterpret_cast<LayeredRomfsStorage *>(storage_uptr)->GetShared();
                 g_ack_mq.Send(storage_uptr);
                 layered_storage->InitializeImpl();
@@ -54,7 +54,7 @@ namespace ams::mitm::fs {
 
             g_req_mq.Send(storage_uptr);
             uintptr_t ack = 0;
-            g_ack_mq.Receive(&ack);
+            g_ack_mq.Receive(std::addressof(ack));
             AMS_ABORT_UNLESS(ack == storage_uptr);
         }
 
@@ -92,7 +92,7 @@ namespace ams::mitm::fs {
             builder.AddStorageFiles(this->storage_romfs.get(), romfs::DataSourceType::Storage);
         }
 
-        builder.Build(&this->source_infos);
+        builder.Build(std::addressof(this->source_infos));
 
         this->is_initialized = true;
         this->initialize_event.Signal();
@@ -140,11 +140,11 @@ namespace ams::mitm::fs {
                     case romfs::DataSourceType::LooseSdFile:
                         {
                             FsFile file;
-                            R_ABORT_UNLESS(mitm::fs::OpenAtmosphereSdRomfsFile(&file, this->program_id, cur_source.loose_source_info.path, OpenMode_Read));
-                            ON_SCOPE_EXIT { fsFileClose(&file); };
+                            R_ABORT_UNLESS(mitm::fs::OpenAtmosphereSdRomfsFile(std::addressof(file), this->program_id, cur_source.loose_source_info.path, OpenMode_Read));
+                            ON_SCOPE_EXIT { fsFileClose(std::addressof(file)); };
 
                             u64 out_read = 0;
-                            R_ABORT_UNLESS(fsFileRead(&file, offset_within_source, cur_dst, cur_read_size, FsReadOption_None, &out_read));
+                            R_ABORT_UNLESS(fsFileRead(std::addressof(file), offset_within_source, cur_dst, cur_read_size, FsReadOption_None, std::addressof(out_read)));
                             AMS_ABORT_UNLESS(out_read == cur_read_size);
                         }
                         break;
@@ -154,7 +154,7 @@ namespace ams::mitm::fs {
                     case romfs::DataSourceType::Metadata:
                         {
                             size_t out_read = 0;
-                            R_ABORT_UNLESS(cur_source.metadata_source_info.file->Read(&out_read, offset_within_source, cur_dst, cur_read_size));
+                            R_ABORT_UNLESS(cur_source.metadata_source_info.file->Read(std::addressof(out_read), offset_within_source, cur_dst, cur_read_size));
                             AMS_ABORT_UNLESS(out_read == cur_read_size);
                         }
                         break;
diff --git a/stratosphere/ams_mitm/source/fs_mitm/fsmitm_romfs.cpp b/stratosphere/ams_mitm/source/fs_mitm/fsmitm_romfs.cpp
index 2e3547bd8..60aa8a4a3 100644
--- a/stratosphere/ams_mitm/source/fs_mitm/fsmitm_romfs.cpp
+++ b/stratosphere/ams_mitm/source/fs_mitm/fsmitm_romfs.cpp
@@ -145,7 +145,7 @@ namespace ams::mitm::fs {
                 private:
                     ALWAYS_INLINE void Read(size_t ofs, void *dst, size_t sz) {
                         u64 read_size;
-                        R_ABORT_UNLESS(fsFileRead(this->file, this->offset + ofs, dst, sz, 0, &read_size));
+                        R_ABORT_UNLESS(fsFileRead(this->file, this->offset + ofs, dst, sz, 0, std::addressof(read_size)));
                         AMS_ABORT_UNLESS(read_size == sz);
                     }
 
@@ -317,9 +317,9 @@ namespace ams::mitm::fs {
             /* Get number of child directories. */
             s64 num_child_dirs = 0;
             {
-                OpenFileSystemRomfsDirectory(&dir, this->program_id, parent, OpenDirectoryMode_Directory, fs);
-                ON_SCOPE_EXIT { fsDirClose(&dir); };
-                R_ABORT_UNLESS(fsDirGetEntryCount(&dir, &num_child_dirs));
+                OpenFileSystemRomfsDirectory(std::addressof(dir), this->program_id, parent, OpenDirectoryMode_Directory, fs);
+                ON_SCOPE_EXIT { fsDirClose(std::addressof(dir)); };
+                R_ABORT_UNLESS(fsDirGetEntryCount(std::addressof(dir), std::addressof(num_child_dirs)));
             }
             AMS_ABORT_UNLESS(num_child_dirs >= 0);
 
@@ -330,12 +330,12 @@ namespace ams::mitm::fs {
 
                 s64 cur_child_dir_ind = 0;
                 {
-                    OpenFileSystemRomfsDirectory(&dir, this->program_id, parent, OpenDirectoryMode_All, fs);
-                    ON_SCOPE_EXIT { fsDirClose(&dir); };
+                    OpenFileSystemRomfsDirectory(std::addressof(dir), this->program_id, parent, OpenDirectoryMode_All, fs);
+                    ON_SCOPE_EXIT { fsDirClose(std::addressof(dir)); };
 
                     s64 read_entries = 0;
                     while (true) {
-                        R_ABORT_UNLESS(fsDirRead(&dir, &read_entries, 1, &this->dir_entry));
+                        R_ABORT_UNLESS(fsDirRead(std::addressof(dir), std::addressof(read_entries), 1, std::addressof(this->dir_entry)));
                         if (read_entries != 1) {
                             break;
                         }
@@ -345,7 +345,7 @@ namespace ams::mitm::fs {
                             AMS_ABORT_UNLESS(child_dirs != nullptr);
 
                             BuildDirectoryContext *real_child = nullptr;
-                            this->AddDirectory(&real_child, parent, std::make_unique<BuildDirectoryContext>(this->dir_entry.name, strlen(this->dir_entry.name)));
+                            this->AddDirectory(std::addressof(real_child), parent, std::make_unique<BuildDirectoryContext>(this->dir_entry.name, strlen(this->dir_entry.name)));
                             AMS_ABORT_UNLESS(real_child != nullptr);
                             child_dirs[cur_child_dir_ind++] = real_child;
                             AMS_ABORT_UNLESS(cur_child_dir_ind <= num_child_dirs);
@@ -392,7 +392,7 @@ namespace ams::mitm::fs {
                 {
                     const DirectoryEntry *cur_child = dir_table.GetEntry(cur_child_offset);
 
-                    this->AddDirectory(&real_child, parent, std::make_unique<BuildDirectoryContext>(cur_child->name, cur_child->name_size));
+                    this->AddDirectory(std::addressof(real_child), parent, std::make_unique<BuildDirectoryContext>(cur_child->name, cur_child->name_size));
                     AMS_ABORT_UNLESS(real_child != nullptr);
 
                     next_child_offset = cur_child->sibling;
@@ -409,25 +409,25 @@ namespace ams::mitm::fs {
         void Builder::AddSdFiles() {
             /* Open Sd Card filesystem. */
             FsFileSystem sd_filesystem;
-            R_ABORT_UNLESS(fsOpenSdCardFileSystem(&sd_filesystem));
-            ON_SCOPE_EXIT { fsFsClose(&sd_filesystem); };
+            R_ABORT_UNLESS(fsOpenSdCardFileSystem(std::addressof(sd_filesystem)));
+            ON_SCOPE_EXIT { fsFsClose(std::addressof(sd_filesystem)); };
 
             /* If there is no romfs folder on the SD, don't bother continuing. */
             {
                 FsDir dir;
-                if (R_FAILED(mitm::fs::OpenAtmosphereRomfsDirectory(&dir, this->program_id, this->root->path.get(), OpenDirectoryMode_Directory, &sd_filesystem))) {
+                if (R_FAILED(mitm::fs::OpenAtmosphereRomfsDirectory(std::addressof(dir), this->program_id, this->root->path.get(), OpenDirectoryMode_Directory, std::addressof(sd_filesystem)))) {
                     return;
                 }
-                fsDirClose(&dir);
+                fsDirClose(std::addressof(dir));
             }
 
             this->cur_source_type = DataSourceType::LooseSdFile;
-            this->VisitDirectory(&sd_filesystem, this->root);
+            this->VisitDirectory(std::addressof(sd_filesystem), this->root);
         }
 
         void Builder::AddStorageFiles(ams::fs::IStorage *storage, DataSourceType source_type) {
             Header header;
-            R_ABORT_UNLESS(storage->Read(0, &header, sizeof(Header)));
+            R_ABORT_UNLESS(storage->Read(0, std::addressof(header), sizeof(Header)));
             AMS_ABORT_UNLESS(header.header_size == sizeof(Header));
 
             /* Read tables. */
@@ -444,8 +444,8 @@ namespace ams::mitm::fs {
 
             /* Open an SD card filesystem. */
             FsFileSystem sd_filesystem;
-            R_ABORT_UNLESS(fsOpenSdCardFileSystem(&sd_filesystem));
-            ON_SCOPE_EXIT { fsFsClose(&sd_filesystem); };
+            R_ABORT_UNLESS(fsOpenSdCardFileSystem(std::addressof(sd_filesystem)));
+            ON_SCOPE_EXIT { fsFsClose(std::addressof(sd_filesystem)); };
 
             /* Calculate hash table sizes. */
             const size_t num_dir_hash_table_entries  = GetHashTableSize(this->num_dirs);
@@ -460,7 +460,7 @@ namespace ams::mitm::fs {
             /* Open metadata file. */
             const size_t metadata_size = this->dir_hash_table_size + this->dir_table_size + this->file_hash_table_size + this->file_table_size;
             FsFile metadata_file;
-            R_ABORT_UNLESS(mitm::fs::CreateAndOpenAtmosphereSdFile(&metadata_file, this->program_id, "romfs_metadata.bin", metadata_size));
+            R_ABORT_UNLESS(mitm::fs::CreateAndOpenAtmosphereSdFile(std::addressof(metadata_file), this->program_id, "romfs_metadata.bin", metadata_size));
 
             /* Ensure later hash tables will have correct defaults. */
             static_assert(EmptyEntry == 0xFFFFFFFF);
@@ -534,13 +534,13 @@ namespace ams::mitm::fs {
                 u32 *file_hash_table = reinterpret_cast<u32 *>(fht_buf);
                 std::memset(file_hash_table, 0xFF, this->file_hash_table_size);
                 ON_SCOPE_EXIT {
-                    R_ABORT_UNLESS(fsFileWrite(&metadata_file, this->dir_hash_table_size + this->dir_table_size, file_hash_table, this->file_hash_table_size, FsWriteOption_None));
+                    R_ABORT_UNLESS(fsFileWrite(std::addressof(metadata_file), this->dir_hash_table_size + this->dir_table_size, file_hash_table, this->file_hash_table_size, FsWriteOption_None));
                     std::free(fht_buf);
                 };
 
                 /* Write the file table. */
                 {
-                    FileTableWriter file_table(&metadata_file, this->dir_hash_table_size + this->dir_table_size + this->file_hash_table_size, this->file_table_size);
+                    FileTableWriter file_table(std::addressof(metadata_file), this->dir_hash_table_size + this->dir_table_size + this->file_hash_table_size, this->file_table_size);
 
                     for (const auto &it : this->files) {
                         BuildFileContext *cur_file = it.get();
@@ -602,13 +602,13 @@ namespace ams::mitm::fs {
                 u32 *dir_hash_table = reinterpret_cast<u32 *>(dht_buf);
                 std::memset(dir_hash_table, 0xFF, this->dir_hash_table_size);
                 ON_SCOPE_EXIT {
-                    R_ABORT_UNLESS(fsFileWrite(&metadata_file, 0, dir_hash_table, this->dir_hash_table_size, FsWriteOption_None));
+                    R_ABORT_UNLESS(fsFileWrite(std::addressof(metadata_file), 0, dir_hash_table, this->dir_hash_table_size, FsWriteOption_None));
                     std::free(dht_buf);
                 };
 
                 /* Write the file table. */
                 {
-                    DirectoryTableWriter dir_table(&metadata_file, this->dir_hash_table_size, this->dir_table_size);
+                    DirectoryTableWriter dir_table(std::addressof(metadata_file), this->dir_hash_table_size, this->dir_table_size);
 
                     for (const auto &it : this->directories) {
                         BuildDirectoryContext *cur_dir = it.get();
@@ -657,7 +657,7 @@ namespace ams::mitm::fs {
 
             /* Save metadata to the SD card, to save on memory space. */
             {
-                R_ABORT_UNLESS(fsFileFlush(&metadata_file));
+                R_ABORT_UNLESS(fsFileFlush(std::addressof(metadata_file)));
                 out_infos->emplace_back(header->dir_hash_table_ofs, metadata_size, DataSourceType::Metadata, new RemoteFile(metadata_file));
             }
         }
diff --git a/stratosphere/ams_mitm/source/ns_mitm/ns_web_mitm_service.cpp b/stratosphere/ams_mitm/source/ns_mitm/ns_web_mitm_service.cpp
index 128f8a3bf..538af7932 100644
--- a/stratosphere/ams_mitm/source/ns_mitm/ns_web_mitm_service.cpp
+++ b/stratosphere/ams_mitm/source/ns_mitm/ns_web_mitm_service.cpp
@@ -26,7 +26,7 @@ namespace ams::mitm::ns {
         /* Always succeed for web applets asking about HBL. */
         /* This enables hbl html. */
         bool is_hbl;
-        if (R_SUCCEEDED(pm::info::IsHblProgramId(&is_hbl, application_id)) && is_hbl) {
+        if (R_SUCCEEDED(pm::info::IsHblProgramId(std::addressof(is_hbl), application_id)) && is_hbl) {
             nswebResolveApplicationContentPath(this->srv.get(), static_cast<u64>(application_id), static_cast<NcmContentType>(content_type));
             return ResultSuccess();
         }
@@ -40,8 +40,8 @@ namespace ams::mitm::ns {
     Result NsWebMitmService::GetDocumentInterface(sf::Out<sf::SharedPointer<impl::IDocumentInterface>> out) {
         /* Open a document interface. */
         NsDocumentInterface doc;
-        R_TRY(nsGetDocumentInterfaceFwd(this->forward_service.get(), &doc));
-        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(&doc.s)};
+        R_TRY(nsGetDocumentInterfaceFwd(this->forward_service.get(), std::addressof(doc)));
+        const sf::cmif::DomainObjectId target_object_id{serviceGetObjectId(std::addressof(doc.s))};
 
         out.SetValue(sf::CreateSharedObjectEmplaced<impl::IDocumentInterface, NsDocumentService>(this->client_info, std::make_unique<NsDocumentInterface>(doc)), target_object_id);
         return ResultSuccess();
diff --git a/stratosphere/ams_mitm/source/set_mitm/settings_sd_kvs.cpp b/stratosphere/ams_mitm/source/set_mitm/settings_sd_kvs.cpp
index 3f7fe59b7..d9f370f31 100644
--- a/stratosphere/ams_mitm/source/set_mitm/settings_sd_kvs.cpp
+++ b/stratosphere/ams_mitm/source/set_mitm/settings_sd_kvs.cpp
@@ -177,11 +177,11 @@ namespace ams::settings::fwdbg {
 
         template<typename T>
         Result ParseSettingsItemIntegralValue(SdKeyValueStoreEntry &out, const char *value_str) {
-            R_TRY(AllocateValue(&out.value, sizeof(T)));
+            R_TRY(AllocateValue(std::addressof(out.value), sizeof(T)));
             out.value_size = sizeof(T);
 
             T value = static_cast<T>(strtoul(value_str, nullptr, 0));
-            std::memcpy(out.value, &value, sizeof(T));
+            std::memcpy(out.value, std::addressof(value), sizeof(T));
             return ResultSuccess();
         }
 
@@ -191,7 +191,7 @@ namespace ams::settings::fwdbg {
             R_TRY(ValidateSettingsItemKey(key));
 
             u8 dummy_value = 0;
-            SdKeyValueStoreEntry test_entry { .name = name, .key = key, .value = &dummy_value, .value_size = sizeof(dummy_value) };
+            SdKeyValueStoreEntry test_entry { .name = name, .key = key, .value = std::addressof(dummy_value), .value_size = sizeof(dummy_value) };
 
             auto *begin = g_entries;
             auto *end   = begin + g_num_entries;
@@ -199,7 +199,7 @@ namespace ams::settings::fwdbg {
             R_UNLESS(it != end,         settings::ResultSettingsItemNotFound());
             R_UNLESS(*it == test_entry, settings::ResultSettingsItemNotFound());
 
-            *out = &*it;
+            *out = std::addressof(*it);
             return ResultSuccess();
         }
 
@@ -223,12 +223,12 @@ namespace ams::settings::fwdbg {
             SdKeyValueStoreEntry new_value = {};
 
             /* Find name and key. */
-            R_TRY(FindSettingsName(&new_value.name, name));
-            R_TRY(FindSettingsItemKey(&new_value.key, key));
+            R_TRY(FindSettingsName(std::addressof(new_value.name), name));
+            R_TRY(FindSettingsItemKey(std::addressof(new_value.key), key));
 
             if (strncasecmp(type, "str", type_len) == 0 || strncasecmp(type, "string", type_len) == 0) {
                 const size_t size = value_len + 1;
-                R_TRY(AllocateValue(&new_value.value, size));
+                R_TRY(AllocateValue(std::addressof(new_value.value), size));
                 std::memcpy(new_value.value, value_str, size);
                 new_value.value_size = size;
             } else if (strncasecmp(type, "hex", type_len) == 0 || strncasecmp(type, "bytes", type_len) == 0) {
@@ -237,7 +237,7 @@ namespace ams::settings::fwdbg {
                 R_UNLESS(IsHexadecimal(value_str), settings::ResultInvalidFormatSettingsItemValue());
 
                 const size_t size = value_len / 2;
-                R_TRY(AllocateValue(&new_value.value, size));
+                R_TRY(AllocateValue(std::addressof(new_value.value), size));
                 new_value.value_size = size;
 
                 u8 *data = reinterpret_cast<u8 *>(new_value.value);
@@ -300,7 +300,7 @@ namespace ams::settings::fwdbg {
             AMS_ABORT_UNLESS(file != nullptr);
 
             Result parse_result = ResultSuccess();
-            util::ini::ParseFile(file.get(), &parse_result, SystemSettingsIniHandler);
+            util::ini::ParseFile(file.get(), std::addressof(parse_result), SystemSettingsIniHandler);
             R_TRY(parse_result);
 
             return ResultSuccess();
@@ -422,7 +422,7 @@ namespace ams::settings::fwdbg {
 
     Result GetSdCardKeyValueStoreSettingsItemValueSize(size_t *out_size, const char *name, const char *key) {
         SdKeyValueStoreEntry *entry = nullptr;
-        R_TRY(GetEntry(&entry, name, key));
+        R_TRY(GetEntry(std::addressof(entry), name, key));
 
         *out_size = entry->value_size;
         return ResultSuccess();
@@ -432,7 +432,7 @@ namespace ams::settings::fwdbg {
         R_UNLESS(dst != nullptr, settings::ResultNullSettingsItemValueBuffer());
 
         SdKeyValueStoreEntry *entry = nullptr;
-        R_TRY(GetEntry(&entry, name, key));
+        R_TRY(GetEntry(std::addressof(entry), name, key));
 
         const size_t size = std::min(entry->value_size, dst_size);
         if (size > 0) {
diff --git a/stratosphere/creport/source/creport_modules.cpp b/stratosphere/creport/source/creport_modules.cpp
index a8e4bfd53..a832cc3cf 100644
--- a/stratosphere/creport/source/creport_modules.cpp
+++ b/stratosphere/creport/source/creport_modules.cpp
@@ -54,7 +54,7 @@ namespace ams::creport {
             if (std::strcmp(this->modules[i].name, "") != 0) {
                 file.WriteFormat("        Name:                    %s\n", module.name);
             }
-            file.DumpMemory("        Build Id:                ", &module.build_id[0], sizeof(module.build_id));
+            file.DumpMemory("        Build Id:                ", module.build_id, sizeof(module.build_id));
         }
     }
 
@@ -77,7 +77,7 @@ namespace ams::creport {
     void ModuleList::TryAddModule(uintptr_t guess) {
         /* Try to locate module from guess. */
         uintptr_t base_address = 0;
-        if (!this->TryFindModule(&base_address, guess)) {
+        if (!this->TryFindModule(std::addressof(base_address), guess)) {
             return;
         }
 
@@ -94,7 +94,7 @@ namespace ams::creport {
             /* Get the region extents. */
             svc::MemoryInfo mi;
             svc::PageInfo pi;
-            if (R_FAILED(svc::QueryDebugProcessMemory(&mi, &pi, this->debug_handle, cur_address))) {
+            if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mi), std::addressof(pi), this->debug_handle, cur_address))) {
                 break;
             }
 
@@ -129,20 +129,20 @@ namespace ams::creport {
         /* Query the memory region our guess falls in. */
         svc::MemoryInfo mi;
         svc::PageInfo pi;
-        if (R_FAILED(svc::QueryDebugProcessMemory(&mi, &pi, this->debug_handle, guess))) {
+        if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mi), std::addressof(pi), this->debug_handle, guess))) {
             return false;
         }
 
         /* If we fall into a RW region, it may be rwdata. Query the region before it, which may be rodata or text. */
         if (mi.permission == svc::MemoryPermission_ReadWrite) {
-            if (R_FAILED(svc::QueryDebugProcessMemory(&mi, &pi, debug_handle, mi.base_address - 4))) {
+            if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mi), std::addressof(pi), debug_handle, mi.base_address - 4))) {
                 return false;
             }
         }
 
         /* If we fall into an RO region, it may be rodata. Query the region before it, which should be text. */
         if (mi.permission == svc::MemoryPermission_Read) {
-            if (R_FAILED(svc::QueryDebugProcessMemory(&mi, &pi, debug_handle, mi.base_address - 4))) {
+            if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mi), std::addressof(pi), debug_handle, mi.base_address - 4))) {
                 return false;
             }
         }
@@ -155,7 +155,7 @@ namespace ams::creport {
         /* Modules are a series of contiguous (text/rodata/rwdata) regions. */
         /* Iterate backwards until we find unmapped memory, to find the start of the set of modules loaded here. */
         while (mi.base_address > 0) {
-            if (R_FAILED(svc::QueryDebugProcessMemory(&mi, &pi, debug_handle, mi.base_address - 4))) {
+            if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mi), std::addressof(pi), debug_handle, mi.base_address - 4))) {
                 return false;
             }
 
@@ -181,7 +181,7 @@ namespace ams::creport {
             svc::PageInfo pi;
 
             /* Verify .rodata is read-only. */
-            if (R_FAILED(svc::QueryDebugProcessMemory(&mi, &pi, this->debug_handle, ro_start_address)) || mi.permission != svc::MemoryPermission_Read) {
+            if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mi), std::addressof(pi), this->debug_handle, ro_start_address)) || mi.permission != svc::MemoryPermission_Read) {
                 return;
             }
 
@@ -228,7 +228,7 @@ namespace ams::creport {
         /* Verify .rodata is read-only. */
         svc::MemoryInfo mi;
         svc::PageInfo pi;
-        if (R_FAILED(svc::QueryDebugProcessMemory(&mi, &pi, this->debug_handle, ro_start_address)) || mi.permission != svc::MemoryPermission_Read) {
+        if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mi), std::addressof(pi), this->debug_handle, ro_start_address)) || mi.permission != svc::MemoryPermission_Read) {
             return;
         }
 
diff --git a/stratosphere/creport/source/creport_threads.cpp b/stratosphere/creport/source/creport_threads.cpp
index 17bd19d8d..1757534f7 100644
--- a/stratosphere/creport/source/creport_threads.cpp
+++ b/stratosphere/creport/source/creport_threads.cpp
@@ -132,7 +132,7 @@ namespace ams::creport {
         }
 
         /* Get the thread context. */
-        if (R_FAILED(svc::GetDebugThreadContext(&this->context, debug_handle, this->thread_id, svc::ThreadContextFlag_All))) {
+        if (R_FAILED(svc::GetDebugThreadContext(std::addressof(this->context), debug_handle, this->thread_id, svc::ThreadContextFlag_All))) {
             return false;
         }
 
@@ -151,21 +151,21 @@ namespace ams::creport {
             if (R_SUCCEEDED(svc::ReadDebugProcessMemory(reinterpret_cast<uintptr_t>(thread_tls), debug_handle, this->tls_address, sizeof(thread_tls)))) {
                 std::memcpy(this->tls, thread_tls, sizeof(this->tls));
                 /* Try to detect libnx threads, and skip name parsing then. */
-                if (*(reinterpret_cast<u32 *>(&thread_tls[0x1E0])) != LibnxThreadVarMagic) {
+                if (*(reinterpret_cast<u32 *>(std::addressof(thread_tls[0x1E0]))) != LibnxThreadVarMagic) {
                     u8 thread_type[0x1C0];
-                    const u64 thread_type_addr = *(reinterpret_cast<u64 *>(&thread_tls[0x1F8]));
+                    const u64 thread_type_addr = *(reinterpret_cast<u64 *>(std::addressof(thread_tls[0x1F8])));
                     if (R_SUCCEEDED(svc::ReadDebugProcessMemory(reinterpret_cast<uintptr_t>(thread_type), debug_handle, thread_type_addr, sizeof(thread_type)))) {
                         /* Get the thread version. */
-                        const u16 thread_version = *reinterpret_cast<u16 *>(&thread_type[0x46]);
+                        const u16 thread_version = *reinterpret_cast<u16 *>(std::addressof(thread_type[0x46]));
                         if (thread_version == 0 || thread_version == 0xFFFF) {
                             /* Check thread name is actually at thread name. */
                             static_assert(0x1A8 - 0x188 == NameLengthMax, "NameLengthMax definition!");
-                            if (*(reinterpret_cast<u64 *>(&thread_type[0x1A8])) == thread_type_addr + 0x188) {
+                            if (*(reinterpret_cast<u64 *>(std::addressof(thread_type[0x1A8]))) == thread_type_addr + 0x188) {
                                 std::memcpy(this->name, thread_type + 0x188, NameLengthMax);
                             }
                         } else if (thread_version == 1) {
                             static_assert(0x1A0 - 0x180 == NameLengthMax, "NameLengthMax definition!");
-                            if (*(reinterpret_cast<u64 *>(&thread_type[0x1A0])) == thread_type_addr + 0x180) {
+                            if (*(reinterpret_cast<u64 *>(std::addressof(thread_type[0x1A0]))) == thread_type_addr + 0x180) {
                                 std::memcpy(this->name, thread_type + 0x180, NameLengthMax);
                             }
                         }
@@ -179,9 +179,9 @@ namespace ams::creport {
 
         /* Dump stack trace. */
         if (is_64_bit) {
-            ReadStackTrace<u64>(&this->stack_trace_size, this->stack_trace, StackTraceSizeMax, debug_handle, this->context.fp);
+            ReadStackTrace<u64>(std::addressof(this->stack_trace_size), this->stack_trace, StackTraceSizeMax, debug_handle, this->context.fp);
         } else {
-            ReadStackTrace<u32>(&this->stack_trace_size, this->stack_trace, StackTraceSizeMax, debug_handle, this->context.fp);
+            ReadStackTrace<u32>(std::addressof(this->stack_trace_size), this->stack_trace, StackTraceSizeMax, debug_handle, this->context.fp);
         }
 
         return true;
@@ -191,14 +191,14 @@ namespace ams::creport {
         /* Query stack region. */
         svc::MemoryInfo mi;
         svc::PageInfo pi;
-        if (R_FAILED(svc::QueryDebugProcessMemory(&mi, &pi, debug_handle, this->context.sp))) {
+        if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mi), std::addressof(pi), debug_handle, this->context.sp))) {
             return;
         }
 
         /* Check if sp points into the stack. */
         if (mi.state != svc::MemoryState_Stack) {
             /* It's possible that sp is below the stack... */
-            if (R_FAILED(svc::QueryDebugProcessMemory(&mi, &pi, debug_handle, mi.base_address + mi.size)) || mi.state != svc::MemoryState_Stack) {
+            if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mi), std::addressof(pi), debug_handle, mi.base_address + mi.size)) || mi.state != svc::MemoryState_Stack) {
                 return;
             }
         }
@@ -219,24 +219,24 @@ namespace ams::creport {
 
     void ThreadInfo::DumpBinary(ScopedFile &file) {
         /* Dump id and context. */
-        file.Write(&this->thread_id, sizeof(this->thread_id));
-        file.Write(&this->context, sizeof(this->context));
+        file.Write(std::addressof(this->thread_id), sizeof(this->thread_id));
+        file.Write(std::addressof(this->context), sizeof(this->context));
 
         /* Dump TLS info and name. */
-        file.Write(&this->tls_address, sizeof(this->tls_address));
-        file.Write(&this->tls, sizeof(this->tls));
-        file.Write(&this->name, sizeof(this->name));
+        file.Write(std::addressof(this->tls_address), sizeof(this->tls_address));
+        file.Write(std::addressof(this->tls), sizeof(this->tls));
+        file.Write(std::addressof(this->name), sizeof(this->name));
 
         /* Dump stack extents and stack dump. */
-        file.Write(&this->stack_bottom, sizeof(this->stack_bottom));
-        file.Write(&this->stack_top, sizeof(this->stack_top));
-        file.Write(&this->stack_dump_base, sizeof(this->stack_dump_base));
-        file.Write(&this->stack_dump, sizeof(this->stack_dump));
+        file.Write(std::addressof(this->stack_bottom), sizeof(this->stack_bottom));
+        file.Write(std::addressof(this->stack_top), sizeof(this->stack_top));
+        file.Write(std::addressof(this->stack_dump_base), sizeof(this->stack_dump_base));
+        file.Write(std::addressof(this->stack_dump), sizeof(this->stack_dump));
 
         /* Dump stack trace. */
         {
             const u64 sts = this->stack_trace_size;
-            file.Write(&sts, sizeof(sts));
+            file.Write(std::addressof(sts), sizeof(sts));
         }
         file.Write(this->stack_trace, this->stack_trace_size);
     }
@@ -244,9 +244,9 @@ namespace ams::creport {
     void ThreadList::DumpBinary(ScopedFile &file, u64 crashed_thread_id) {
         const u32 magic = DumpedThreadInfoMagic;
         const u32 count = this->thread_count;
-        file.Write(&magic, sizeof(magic));
-        file.Write(&count, sizeof(count));
-        file.Write(&crashed_thread_id, sizeof(crashed_thread_id));
+        file.Write(std::addressof(magic), sizeof(magic));
+        file.Write(std::addressof(count), sizeof(count));
+        file.Write(std::addressof(crashed_thread_id), sizeof(crashed_thread_id));
         for (size_t i = 0; i < this->thread_count; i++) {
             this->threads[i].DumpBinary(file);
         }
@@ -259,7 +259,7 @@ namespace ams::creport {
         s32 num_threads;
         u64 thread_ids[ThreadCountMax];
         {
-            if (R_FAILED(svc::GetThreadList(&num_threads, thread_ids, ThreadCountMax, debug_handle))) {
+            if (R_FAILED(svc::GetThreadList(std::addressof(num_threads), thread_ids, ThreadCountMax, debug_handle))) {
                 return;
             }
             num_threads = std::min(size_t(num_threads), ThreadCountMax);
diff --git a/stratosphere/dmnt/source/cheat/impl/dmnt_cheat_api.cpp b/stratosphere/dmnt/source/cheat/impl/dmnt_cheat_api.cpp
index ffd5cf49e..fe43d97e5 100644
--- a/stratosphere/dmnt/source/cheat/impl/dmnt_cheat_api.cpp
+++ b/stratosphere/dmnt/source/cheat/impl/dmnt_cheat_api.cpp
@@ -195,7 +195,7 @@ namespace ams::dmnt::cheat::impl {
 
                         /* Clear metadata. */
                         static_assert(util::is_pod<decltype(this->cheat_process_metadata)>::value, "CheatProcessMetadata definition!");
-                        std::memset(&this->cheat_process_metadata, 0, sizeof(this->cheat_process_metadata));
+                        std::memset(std::addressof(this->cheat_process_metadata), 0, sizeof(this->cheat_process_metadata));
 
                         /* Clear cheat list. */
                         this->ResetAllCheatEntries();
@@ -219,8 +219,8 @@ namespace ams::dmnt::cheat::impl {
                     /* Note: This function *MUST* be called only with the cheat lock held. */
                     os::ProcessId pid;
                     bool has_cheat_process = this->cheat_process_debug_handle != os::InvalidNativeHandle;
-                    has_cheat_process &= R_SUCCEEDED(os::GetProcessId(&pid, this->cheat_process_debug_handle));
-                    has_cheat_process &= R_SUCCEEDED(pm::dmnt::GetApplicationProcessId(&pid));
+                    has_cheat_process &= R_SUCCEEDED(os::GetProcessId(std::addressof(pid), this->cheat_process_debug_handle));
+                    has_cheat_process &= R_SUCCEEDED(pm::dmnt::GetApplicationProcessId(std::addressof(pid)));
                     has_cheat_process &= (pid == this->cheat_process_metadata.process_id);
 
                     if (!has_cheat_process) {
@@ -241,7 +241,7 @@ namespace ams::dmnt::cheat::impl {
 
                 os::NativeHandle HookToCreateApplicationProcess() const {
                     os::NativeHandle h;
-                    R_ABORT_UNLESS(pm::dmnt::HookToCreateApplicationProcess(&h));
+                    R_ABORT_UNLESS(pm::dmnt::HookToCreateApplicationProcess(std::addressof(h)));
                     return h;
                 }
 
@@ -254,12 +254,12 @@ namespace ams::dmnt::cheat::impl {
                     /* Learn whether we should enable cheats by default. */
                     {
                         u8 en = 0;
-                        if (settings::fwdbg::GetSettingsItemValue(&en, sizeof(en), "atmosphere", "dmnt_cheats_enabled_by_default") == sizeof(en)) {
+                        if (settings::fwdbg::GetSettingsItemValue(std::addressof(en), sizeof(en), "atmosphere", "dmnt_cheats_enabled_by_default") == sizeof(en)) {
                             this->enable_cheats_by_default = (en != 0);
                         }
 
                         en = 0;
-                        if (settings::fwdbg::GetSettingsItemValue( &en, sizeof(en), "atmosphere", "dmnt_always_save_cheat_toggles") == sizeof(en)) {
+                        if (settings::fwdbg::GetSettingsItemValue( std::addressof(en), sizeof(en), "atmosphere", "dmnt_always_save_cheat_toggles") == sizeof(en)) {
                             this->always_save_cheat_toggles = (en != 0);
                         }
                     }
@@ -293,7 +293,7 @@ namespace ams::dmnt::cheat::impl {
 
                     R_TRY(this->EnsureCheatProcess());
 
-                    std::memcpy(out, &this->cheat_process_metadata, sizeof(*out));
+                    std::memcpy(out, std::addressof(this->cheat_process_metadata), sizeof(*out));
                     return ResultSuccess();
                 }
 
@@ -327,7 +327,7 @@ namespace ams::dmnt::cheat::impl {
                         if (proc_addr <= address && address < proc_addr + size) {
                             const size_t offset = (address - proc_addr);
                             const size_t copy_size = std::min(sizeof(value.value), size - offset);
-                            std::memcpy(&value.value, reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(data) + offset), copy_size);
+                            std::memcpy(std::addressof(value.value), reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(data) + offset), copy_size);
                         }
                     }
 
@@ -356,7 +356,7 @@ namespace ams::dmnt::cheat::impl {
                     svc::PageInfo page_info;
                     u64 address = 0, count = 0;
                     do {
-                        if (R_FAILED(svc::QueryDebugProcessMemory(&mem_info, &page_info, this->GetCheatProcessHandle(), address))) {
+                        if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mem_info), std::addressof(page_info), this->GetCheatProcessHandle(), address))) {
                             break;
                         }
 
@@ -380,7 +380,7 @@ namespace ams::dmnt::cheat::impl {
                     svc::PageInfo page_info;
                     u64 address = 0, total_count = 0, written_count = 0;
                     do {
-                        if (R_FAILED(svc::QueryDebugProcessMemory(&mem_info, &page_info, this->GetCheatProcessHandle(), address))) {
+                        if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mem_info), std::addressof(page_info), this->GetCheatProcessHandle(), address))) {
                             break;
                         }
 
@@ -420,7 +420,7 @@ namespace ams::dmnt::cheat::impl {
                     R_TRY(this->EnsureCheatProcess());
 
                     svc::PageInfo page_info;
-                    return svc::QueryDebugProcessMemory(mapping, &page_info, this->GetCheatProcessHandle(), address);
+                    return svc::QueryDebugProcessMemory(mapping, std::addressof(page_info), this->GetCheatProcessHandle(), address);
                 }
 
                 Result PauseCheatProcess() {
@@ -646,7 +646,7 @@ namespace ams::dmnt::cheat::impl {
 
                     FrozenAddressValue value = {};
                     value.width = width;
-                    R_TRY(this->ReadCheatProcessMemoryUnsafe(address, &value.value, width));
+                    R_TRY(this->ReadCheatProcessMemoryUnsafe(address, std::addressof(value.value), width));
 
                     FrozenAddressMapEntry *entry = AllocateFrozenAddress(address, value);
                     R_UNLESS(entry != nullptr, dmnt::cheat::ResultFrozenAddressOutOfResource());
@@ -677,11 +677,11 @@ namespace ams::dmnt::cheat::impl {
             CheatProcessManager *this_ptr = reinterpret_cast<CheatProcessManager *>(_this);
             Event hook;
             while (true) {
-                eventLoadRemote(&hook, this_ptr->HookToCreateApplicationProcess(), true);
-                if (R_SUCCEEDED(eventWait(&hook, std::numeric_limits<u64>::max()))) {
+                eventLoadRemote(std::addressof(hook), this_ptr->HookToCreateApplicationProcess(), true);
+                if (R_SUCCEEDED(eventWait(std::addressof(hook), std::numeric_limits<u64>::max()))) {
                     this_ptr->AttachToApplicationProcess(true);
                 }
-                eventClose(&hook);
+                eventClose(std::addressof(hook));
             }
         }
 
@@ -747,7 +747,7 @@ namespace ams::dmnt::cheat::impl {
 
                             /* Execute program only if it has opcodes. */
                             if (this_ptr->cheat_vm.GetProgramSize()) {
-                                this_ptr->cheat_vm.Execute(&this_ptr->cheat_process_metadata);
+                                this_ptr->cheat_vm.Execute(std::addressof(this_ptr->cheat_process_metadata));
                             }
                         }
 
@@ -792,7 +792,7 @@ namespace ams::dmnt::cheat::impl {
             }
 
             /* Get the application process's ID. */
-            R_ABORT_UNLESS_IF_NEW_PROCESS(pm::dmnt::GetApplicationProcessId(&this->cheat_process_metadata.process_id));
+            R_ABORT_UNLESS_IF_NEW_PROCESS(pm::dmnt::GetApplicationProcessId(std::addressof(this->cheat_process_metadata.process_id)));
             auto proc_guard = SCOPE_GUARD {
                 if (on_process_launch) {
                     this->StartProcess(this->cheat_process_metadata.process_id);
@@ -806,7 +806,7 @@ namespace ams::dmnt::cheat::impl {
                 ncm::ProgramLocation loc = {};
                 cfg::OverrideStatus status = {};
 
-                R_ABORT_UNLESS_IF_NEW_PROCESS(pm::dmnt::AtmosphereGetProcessInfo(&proc_h, &loc, &status, this->cheat_process_metadata.process_id));
+                R_ABORT_UNLESS_IF_NEW_PROCESS(pm::dmnt::AtmosphereGetProcessInfo(std::addressof(proc_h), std::addressof(loc), std::addressof(status), this->cheat_process_metadata.process_id));
                 ON_SCOPE_EXIT { os::CloseNativeHandle(proc_h); };
 
                 this->cheat_process_metadata.program_id = loc.program_id;
@@ -830,7 +830,7 @@ namespace ams::dmnt::cheat::impl {
                 s32 num_modules;
 
                 /* TODO: ldr::dmnt:: */
-                R_ABORT_UNLESS_IF_NEW_PROCESS(ldrDmntGetProcessModuleInfo(static_cast<u64>(this->cheat_process_metadata.process_id), proc_modules, util::size(proc_modules), &num_modules));
+                R_ABORT_UNLESS_IF_NEW_PROCESS(ldrDmntGetProcessModuleInfo(static_cast<u64>(this->cheat_process_metadata.process_id), proc_modules, util::size(proc_modules), std::addressof(num_modules)));
 
                 /* All applications must have two modules. */
                 /* Only accept one (which means we're attaching to HBL) */
diff --git a/stratosphere/dmnt/source/cheat/impl/dmnt_cheat_vm.cpp b/stratosphere/dmnt/source/cheat/impl/dmnt_cheat_vm.cpp
index 538578669..68bf7ea42 100644
--- a/stratosphere/dmnt/source/cheat/impl/dmnt_cheat_vm.cpp
+++ b/stratosphere/dmnt/source/cheat/impl/dmnt_cheat_vm.cpp
@@ -676,7 +676,7 @@ namespace ams::dmnt::cheat::impl {
             const size_t desired_depth = this->condition_depth - 1;
 
             CheatVmOpcode skip_opcode;
-            while (this->condition_depth > desired_depth && this->DecodeNextOpcode(&skip_opcode)) {
+            while (this->condition_depth > desired_depth && this->DecodeNextOpcode(std::addressof(skip_opcode))) {
                 /* Decode instructions until we see end of the current conditional block. */
                 /* NOTE: This is broken in gateway's implementation. */
                 /* Gateway currently checks for "0x2" instead of "0x20000000" */
@@ -770,7 +770,7 @@ namespace ams::dmnt::cheat::impl {
         u64 kHeld = 0;
 
         /* Get Keys held. */
-        hid::GetKeysHeld(&kHeld);
+        hid::GetKeysHeld(std::addressof(kHeld));
 
         this->OpenDebugLogFile();
         ON_SCOPE_EXIT { this->CloseDebugLogFile(); };
@@ -784,7 +784,7 @@ namespace ams::dmnt::cheat::impl {
         this->ResetState();
 
         /* Loop until program finishes. */
-        while (this->DecodeNextOpcode(&cur_opcode)) {
+        while (this->DecodeNextOpcode(std::addressof(cur_opcode))) {
             this->LogToDebugFile("Instruction Ptr: %04x\n", (u32)this->instruction_ptr);
 
             for (size_t i = 0; i < NumRegisters; i++) {
@@ -794,7 +794,7 @@ namespace ams::dmnt::cheat::impl {
             for (size_t i = 0; i < NumRegisters; i++) {
                 this->LogToDebugFile("SavedRegs[%02x]: %016lx\n", i, this->saved_values[i]);
             }
-            this->LogOpcode(&cur_opcode);
+            this->LogOpcode(std::addressof(cur_opcode));
 
             /* Increment conditional depth, if relevant. */
             if (cur_opcode.begin_conditional_block) {
@@ -812,7 +812,7 @@ namespace ams::dmnt::cheat::impl {
                             case 2:
                             case 4:
                             case 8:
-                                dmnt::cheat::impl::WriteCheatProcessMemoryUnsafe(dst_address, &dst_value, cur_opcode.store_static.bit_width);
+                                dmnt::cheat::impl::WriteCheatProcessMemoryUnsafe(dst_address, std::addressof(dst_value), cur_opcode.store_static.bit_width);
                                 break;
                         }
                     }
@@ -827,7 +827,7 @@ namespace ams::dmnt::cheat::impl {
                             case 2:
                             case 4:
                             case 8:
-                                dmnt::cheat::impl::ReadCheatProcessMemoryUnsafe(src_address, &src_value, cur_opcode.begin_cond.bit_width);
+                                dmnt::cheat::impl::ReadCheatProcessMemoryUnsafe(src_address, std::addressof(src_value), cur_opcode.begin_cond.bit_width);
                                 break;
                         }
                         /* Check against condition. */
@@ -903,7 +903,7 @@ namespace ams::dmnt::cheat::impl {
                             case 2:
                             case 4:
                             case 8:
-                                dmnt::cheat::impl::ReadCheatProcessMemoryUnsafe(src_address, &this->registers[cur_opcode.ldr_memory.reg_index], cur_opcode.ldr_memory.bit_width);
+                                dmnt::cheat::impl::ReadCheatProcessMemoryUnsafe(src_address, std::addressof(this->registers[cur_opcode.ldr_memory.reg_index]), cur_opcode.ldr_memory.bit_width);
                                 break;
                         }
                     }
@@ -922,7 +922,7 @@ namespace ams::dmnt::cheat::impl {
                             case 2:
                             case 4:
                             case 8:
-                                dmnt::cheat::impl::WriteCheatProcessMemoryUnsafe(dst_address, &dst_value, cur_opcode.str_static.bit_width);
+                                dmnt::cheat::impl::WriteCheatProcessMemoryUnsafe(dst_address, std::addressof(dst_value), cur_opcode.str_static.bit_width);
                                 break;
                         }
                         /* Increment register if relevant. */
@@ -1073,7 +1073,7 @@ namespace ams::dmnt::cheat::impl {
                             case 2:
                             case 4:
                             case 8:
-                                dmnt::cheat::impl::WriteCheatProcessMemoryUnsafe(dst_address, &dst_value, cur_opcode.str_register.bit_width);
+                                dmnt::cheat::impl::WriteCheatProcessMemoryUnsafe(dst_address, std::addressof(dst_value), cur_opcode.str_register.bit_width);
                                 break;
                         }
 
@@ -1144,7 +1144,7 @@ namespace ams::dmnt::cheat::impl {
                                 case 2:
                                 case 4:
                                 case 8:
-                                    dmnt::cheat::impl::ReadCheatProcessMemoryUnsafe(cond_address, &cond_value, cur_opcode.begin_reg_cond.bit_width);
+                                    dmnt::cheat::impl::ReadCheatProcessMemoryUnsafe(cond_address, std::addressof(cond_value), cur_opcode.begin_reg_cond.bit_width);
                                     break;
                             }
                         }
@@ -1286,7 +1286,7 @@ namespace ams::dmnt::cheat::impl {
                                 case 2:
                                 case 4:
                                 case 8:
-                                    dmnt::cheat::impl::ReadCheatProcessMemoryUnsafe(val_address, &log_value, cur_opcode.debug_log.bit_width);
+                                    dmnt::cheat::impl::ReadCheatProcessMemoryUnsafe(val_address, std::addressof(log_value), cur_opcode.debug_log.bit_width);
                                     break;
                             }
                         }
diff --git a/stratosphere/fatal/source/fatal_config.cpp b/stratosphere/fatal/source/fatal_config.cpp
index c8e252b31..210350cbc 100644
--- a/stratosphere/fatal/source/fatal_config.cpp
+++ b/stratosphere/fatal/source/fatal_config.cpp
@@ -43,7 +43,7 @@ namespace ams::fatal::srv {
         /* Event creator. */
         os::NativeHandle GetFatalDirtyEventReadableHandle() {
             Event evt;
-            R_ABORT_UNLESS(setsysAcquireFatalDirtyFlagEventHandle(&evt));
+            R_ABORT_UNLESS(setsysAcquireFatalDirtyFlagEventHandle(std::addressof(evt)));
             return evt.revent;
         }
 
@@ -68,7 +68,7 @@ namespace ams::fatal::srv {
         os::ClearSystemEvent(std::addressof(g_fatal_dirty_event));
 
         u64 flags_0, flags_1;
-        if (R_SUCCEEDED(setsysGetFatalDirtyFlags(&flags_0, &flags_1)) && (flags_0 & 1)) {
+        if (R_SUCCEEDED(setsysGetFatalDirtyFlags(std::addressof(flags_0), std::addressof(flags_1))) && (flags_0 & 1)) {
             GetFatalConfigImpl().UpdateLanguageCode();
         }
     }
@@ -77,20 +77,20 @@ namespace ams::fatal::srv {
         /* Get information from set. */
         settings::system::GetSerialNumber(std::addressof(this->serial_number));
         settings::system::GetFirmwareVersion(std::addressof(this->firmware_version));
-        setsysGetQuestFlag(&this->quest_flag);
+        setsysGetQuestFlag(std::addressof(this->quest_flag));
         this->UpdateLanguageCode();
 
         /* Read information from settings. */
-        settings::fwdbg::GetSettingsItemValue(&this->transition_to_fatal, sizeof(this->transition_to_fatal), "fatal", "transition_to_fatal");
-        settings::fwdbg::GetSettingsItemValue(&this->show_extra_info, sizeof(this->show_extra_info), "fatal", "show_extra_info");
+        settings::fwdbg::GetSettingsItemValue(std::addressof(this->transition_to_fatal), sizeof(this->transition_to_fatal), "fatal", "transition_to_fatal");
+        settings::fwdbg::GetSettingsItemValue(std::addressof(this->show_extra_info), sizeof(this->show_extra_info), "fatal", "show_extra_info");
 
         u64 quest_interval_second;
-        settings::fwdbg::GetSettingsItemValue(&quest_interval_second, sizeof(quest_interval_second), "fatal", "quest_reboot_interval_second");
+        settings::fwdbg::GetSettingsItemValue(std::addressof(quest_interval_second), sizeof(quest_interval_second), "fatal", "quest_reboot_interval_second");
         this->quest_reboot_interval = TimeSpan::FromSeconds(quest_interval_second);
 
         /* Atmosphere extension for automatic reboot. */
         u64 auto_reboot_ms;
-        if (settings::fwdbg::GetSettingsItemValue(&auto_reboot_ms, sizeof(auto_reboot_ms), "atmosphere", "fatal_auto_reboot_interval") == sizeof(auto_reboot_ms)) {
+        if (settings::fwdbg::GetSettingsItemValue(std::addressof(auto_reboot_ms), sizeof(auto_reboot_ms), "atmosphere", "fatal_auto_reboot_interval") == sizeof(auto_reboot_ms)) {
             this->fatal_auto_reboot_interval = TimeSpan::FromMilliSeconds(auto_reboot_ms);
             this->fatal_auto_reboot_enabled  = auto_reboot_ms != 0;
         }
diff --git a/stratosphere/fatal/source/fatal_debug.cpp b/stratosphere/fatal/source/fatal_debug.cpp
index d4c1ac105..defe32894 100644
--- a/stratosphere/fatal/source/fatal_debug.cpp
+++ b/stratosphere/fatal/source/fatal_debug.cpp
@@ -160,13 +160,13 @@ namespace ams::fatal::srv {
         bool TryGuessBaseAddress(u64 *out_base_address, os::NativeHandle debug_handle, u64 guess) {
             svc::MemoryInfo mi;
             svc::PageInfo pi;
-            if (R_FAILED(svc::QueryDebugProcessMemory(&mi, &pi, debug_handle, guess)) || mi.permission != svc::MemoryPermission_ReadExecute) {
+            if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mi), std::addressof(pi), debug_handle, guess)) || mi.permission != svc::MemoryPermission_ReadExecute) {
                 return false;
             }
 
             /* Iterate backwards until we find the memory before the code region. */
             while (mi.base_address > 0) {
-                if (R_FAILED(svc::QueryDebugProcessMemory(&mi, &pi, debug_handle, guess))) {
+                if (R_FAILED(svc::QueryDebugProcessMemory(std::addressof(mi), std::addressof(pi), debug_handle, guess))) {
                     return false;
                 }
 
@@ -185,16 +185,16 @@ namespace ams::fatal::srv {
         u64 GetBaseAddress(const ThrowContext *throw_ctx, const svc::ThreadContext *thread_ctx, os::NativeHandle debug_handle) {
             u64 base_address = 0;
 
-            if (TryGuessBaseAddress(&base_address, debug_handle, thread_ctx->pc)) {
+            if (TryGuessBaseAddress(std::addressof(base_address), debug_handle, thread_ctx->pc)) {
                 return base_address;
             }
 
-            if (TryGuessBaseAddress(&base_address, debug_handle, thread_ctx->lr)) {
+            if (TryGuessBaseAddress(std::addressof(base_address), debug_handle, thread_ctx->lr)) {
                 return base_address;
             }
 
             for (size_t i = 0; i < throw_ctx->cpu_ctx.aarch64_ctx.stack_trace_size; i++) {
-                if (TryGuessBaseAddress(&base_address, debug_handle, throw_ctx->cpu_ctx.aarch64_ctx.stack_trace[i])) {
+                if (TryGuessBaseAddress(std::addressof(base_address), debug_handle, throw_ctx->cpu_ctx.aarch64_ctx.stack_trace[i])) {
                     return base_address;
                 }
             }
@@ -253,7 +253,7 @@ namespace ams::fatal::srv {
             /* We start by trying to get a list of threads. */
             s32 thread_count;
             u64 thread_ids[0x60];
-            if (R_FAILED(svc::GetThreadList(&thread_count, thread_ids, 0x60, debug_handle))) {
+            if (R_FAILED(svc::GetThreadList(std::addressof(thread_count), thread_ids, 0x60, debug_handle))) {
                 return;
             }
 
@@ -265,7 +265,7 @@ namespace ams::fatal::srv {
                     continue;
                 }
 
-                if (IsThreadFatalCaller(ctx->result, debug_handle, cur_thread_id, cur_thread_tls, &thread_ctx)) {
+                if (IsThreadFatalCaller(ctx->result, debug_handle, cur_thread_id, cur_thread_tls, std::addressof(thread_ctx))) {
                     thread_id  = cur_thread_id;
                     thread_tls = cur_thread_tls;
                     found_fatal_caller = true;
@@ -276,7 +276,7 @@ namespace ams::fatal::srv {
                 return;
             }
         }
-        if (R_FAILED(svc::GetDebugThreadContext(&thread_ctx, debug_handle, thread_id, svc::ThreadContextFlag_All))) {
+        if (R_FAILED(svc::GetDebugThreadContext(std::addressof(thread_ctx), debug_handle, thread_id, svc::ThreadContextFlag_All))) {
             return;
         }
 
@@ -325,7 +325,7 @@ namespace ams::fatal::srv {
         }
 
         /* Parse the base address. */
-        ctx->cpu_ctx.aarch64_ctx.SetBaseAddress(GetBaseAddress(ctx, &thread_ctx, debug_handle));
+        ctx->cpu_ctx.aarch64_ctx.SetBaseAddress(GetBaseAddress(ctx, std::addressof(thread_ctx), debug_handle));
     }
 
 }
diff --git a/stratosphere/fatal/source/fatal_font.cpp b/stratosphere/fatal/source/fatal_font.cpp
index 482c7579d..d3e7e8b8d 100644
--- a/stratosphere/fatal/source/fatal_font.cpp
+++ b/stratosphere/fatal/source/fatal_font.cpp
@@ -94,7 +94,7 @@ namespace ams::fatal::srv::font {
 
         void DrawCodePoint(u32 codepoint, u32 x, u32 y) {
             int width = 0, height = 0;
-            u8* imageptr = stbtt_GetCodepointBitmap(&g_stb_font, g_font_size, g_font_size, codepoint, &width, &height, 0, 0);
+            u8* imageptr = stbtt_GetCodepointBitmap(std::addressof(g_stb_font), g_font_size, g_font_size, codepoint, std::addressof(width), std::addressof(height), 0, 0);
             ON_SCOPE_EXIT { DeallocateForFont(imageptr); };
 
             for (int tmpy = 0; tmpy < height; tmpy++) {
@@ -114,11 +114,11 @@ namespace ams::fatal::srv::font {
             u32 prev_char = 0;
             for (u32 i = 0; i < len; ) {
                 u32 cur_char;
-                ssize_t unit_count = decode_utf8(&cur_char, reinterpret_cast<const u8 *>(str + i));
+                ssize_t unit_count = decode_utf8(std::addressof(cur_char), reinterpret_cast<const u8 *>(str + i));
                 if (unit_count <= 0) break;
 
                 if (!g_mono_adv && i > 0) {
-                    cur_x += g_font_size * stbtt_GetCodepointKernAdvance(&g_stb_font, prev_char, cur_char);
+                    cur_x += g_font_size * stbtt_GetCodepointKernAdvance(std::addressof(g_stb_font), prev_char, cur_char);
                 }
 
                 i += unit_count;
@@ -130,11 +130,11 @@ namespace ams::fatal::srv::font {
                 }
 
                 int adv_width, left_side_bearing;
-                stbtt_GetCodepointHMetrics(&g_stb_font, cur_char, &adv_width, &left_side_bearing);
+                stbtt_GetCodepointHMetrics(std::addressof(g_stb_font), cur_char, std::addressof(adv_width), std::addressof(left_side_bearing));
                 const u32 cur_width = static_cast<u32>(adv_width) * g_font_size;
 
                 int x0, y0, x1, y1;
-                stbtt_GetCodepointBitmapBoxSubpixel(&g_stb_font, cur_char, g_font_size, g_font_size, 0, 0, &x0, &y0, &x1, &y1);
+                stbtt_GetCodepointBitmapBoxSubpixel(std::addressof(g_stb_font), cur_char, g_font_size, g_font_size, 0, 0, std::addressof(x0), std::addressof(y0), std::addressof(x1), std::addressof(y1));
 
                 DrawCodePoint(cur_char, cur_x + x0 + ((mono && g_mono_adv > cur_width) ? ((g_mono_adv - cur_width) / 2) : 0), cur_y + y0);
 
@@ -225,14 +225,14 @@ namespace ams::fatal::srv::font {
     }
 
     void SetFontSize(float fsz) {
-        g_font_size = stbtt_ScaleForPixelHeight(&g_stb_font, fsz * 1.375);
+        g_font_size = stbtt_ScaleForPixelHeight(std::addressof(g_stb_font), fsz * 1.375);
 
         int ascent;
-        stbtt_GetFontVMetrics(&g_stb_font, &ascent,0,0);
+        stbtt_GetFontVMetrics(std::addressof(g_stb_font), std::addressof(ascent),0,0);
         g_font_line_pixels = ascent * g_font_size * 1.125;
 
         int adv_width, left_side_bearing;
-        stbtt_GetCodepointHMetrics(&g_stb_font, 'A', &adv_width, &left_side_bearing);
+        stbtt_GetCodepointHMetrics(std::addressof(g_stb_font), 'A', std::addressof(adv_width), std::addressof(left_side_bearing));
 
         g_mono_adv = adv_width * g_font_size;
     }
@@ -248,10 +248,10 @@ namespace ams::fatal::srv::font {
     }
 
     Result InitializeSharedFont() {
-        R_TRY(plGetSharedFontByType(&g_font, PlSharedFontType_Standard));
+        R_TRY(plGetSharedFontByType(std::addressof(g_font), PlSharedFontType_Standard));
 
         u8 *font_buffer = reinterpret_cast<u8 *>(g_font.address);
-        stbtt_InitFont(&g_stb_font, font_buffer, stbtt_GetFontOffsetForIndex(font_buffer, 0));
+        stbtt_InitFont(std::addressof(g_stb_font), font_buffer, stbtt_GetFontOffsetForIndex(font_buffer, 0));
 
         SetFontSize(16.0f);
         return ResultSuccess();
diff --git a/stratosphere/fatal/source/fatal_repair.cpp b/stratosphere/fatal/source/fatal_repair.cpp
index a3926e6bc..201ec4ba4 100644
--- a/stratosphere/fatal/source/fatal_repair.cpp
+++ b/stratosphere/fatal/source/fatal_repair.cpp
@@ -28,7 +28,7 @@ namespace ams::fatal::srv {
             }
 
             bool in_repair;
-            return R_SUCCEEDED(setsysGetInRepairProcessEnableFlag(&in_repair)) && in_repair;
+            return R_SUCCEEDED(setsysGetInRepairProcessEnableFlag(std::addressof(in_repair))) && in_repair;
         }
 
         bool IsInRepairWithoutVolHeld() {
@@ -66,7 +66,7 @@ namespace ams::fatal::srv {
             }
 
             bool requires_time_reviser;
-            return R_SUCCEEDED(setsysGetRequiresRunRepairTimeReviser(&requires_time_reviser)) && requires_time_reviser;
+            return R_SUCCEEDED(setsysGetRequiresRunRepairTimeReviser(std::addressof(requires_time_reviser))) && requires_time_reviser;
         }
 
         bool IsTimeReviserCartridgeInserted() {
@@ -74,21 +74,21 @@ namespace ams::fatal::srv {
             u8 gc_attr;
             {
                 FsDeviceOperator devop;
-                if (R_FAILED(fsOpenDeviceOperator(&devop))) {
+                if (R_FAILED(fsOpenDeviceOperator(std::addressof(devop)))) {
                     return false;
                 }
 
                 /* Ensure we close even on early return. */
-                ON_SCOPE_EXIT { fsDeviceOperatorClose(&devop); };
+                ON_SCOPE_EXIT { fsDeviceOperatorClose(std::addressof(devop)); };
 
                 /* Check that a gamecard is inserted. */
                 bool inserted;
-                if (R_FAILED(fsDeviceOperatorIsGameCardInserted(&devop, &inserted)) || !inserted) {
+                if (R_FAILED(fsDeviceOperatorIsGameCardInserted(std::addressof(devop), std::addressof(inserted))) || !inserted) {
                     return false;
                 }
 
                 /* Check that we can retrieve the gamecard's attributes. */
-                if (R_FAILED(fsDeviceOperatorGetGameCardHandle(&devop, &gc_hnd)) || R_FAILED(fsDeviceOperatorGetGameCardAttribute(&devop, &gc_hnd, &gc_attr))) {
+                if (R_FAILED(fsDeviceOperatorGetGameCardHandle(std::addressof(devop), std::addressof(gc_hnd))) || R_FAILED(fsDeviceOperatorGetGameCardAttribute(std::addressof(devop), std::addressof(gc_hnd), std::addressof(gc_attr)))) {
                     return false;
                 }
             }
diff --git a/stratosphere/fatal/source/fatal_service.cpp b/stratosphere/fatal/source/fatal_service.cpp
index f479713e0..b052d9b7e 100644
--- a/stratosphere/fatal/source/fatal_service.cpp
+++ b/stratosphere/fatal/source/fatal_service.cpp
@@ -85,13 +85,13 @@ namespace ams::fatal::srv {
             }
 
             /* Get program id. */
-            pm::info::GetProgramId(&this->context.program_id, process_id);
+            pm::info::GetProgramId(std::addressof(this->context.program_id), process_id);
             this->context.is_creport = (this->context.program_id == ncm::SystemProgramId::Creport);
 
             if (!this->context.is_creport) {
                 /* On firmware version 2.0.0, use debugging SVCs to collect information. */
                 if (hos::GetVersion() >= hos::Version_2_0_0) {
-                    fatal::srv::TryCollectDebugInformation(&this->context, process_id);
+                    fatal::srv::TryCollectDebugInformation(std::addressof(this->context), process_id);
                 }
             } else {
                 /* We received info from creport. Parse program id from afsr0. */
@@ -117,7 +117,7 @@ namespace ams::fatal::srv {
                     this->event_manager.SignalEvents();
 
                     if (GetFatalConfig().ShouldTransitionToFatal()) {
-                        RunTasks(&this->context);
+                        RunTasks(std::addressof(this->context));
                     }
                     break;
                 /* N aborts here. Should we just return an error code? */
diff --git a/stratosphere/fatal/source/fatal_task_clock.cpp b/stratosphere/fatal/source/fatal_task_clock.cpp
index 20f420fe7..7c689197f 100644
--- a/stratosphere/fatal/source/fatal_task_clock.cpp
+++ b/stratosphere/fatal/source/fatal_task_clock.cpp
@@ -41,13 +41,13 @@ namespace ams::fatal::srv {
             if (hos::GetVersion() >= hos::Version_8_0_0) {
                 /* On 8.0.0+, convert to module id + use clkrst API. */
                 PcvModuleId module_id;
-                R_TRY(pcvGetModuleId(&module_id, module));
+                R_TRY(pcvGetModuleId(std::addressof(module_id), module));
 
                 ClkrstSession session;
-                R_TRY(clkrstOpenSession(&session, module_id, 3));
-                ON_SCOPE_EXIT { clkrstCloseSession(&session); };
+                R_TRY(clkrstOpenSession(std::addressof(session), module_id, 3));
+                ON_SCOPE_EXIT { clkrstCloseSession(std::addressof(session)); };
 
-                R_TRY(clkrstSetClockRate(&session, hz));
+                R_TRY(clkrstSetClockRate(std::addressof(session), hz));
             } else {
                 /* On 1.0.0-7.0.1, use pcv API. */
                 R_TRY(pcvSetClockRate(module, hz));
@@ -77,7 +77,7 @@ namespace ams::fatal::srv {
 
     ITask *GetAdjustClockTask(const ThrowContext *ctx) {
         g_adjust_clock_task.Initialize(ctx);
-        return &g_adjust_clock_task;
+        return std::addressof(g_adjust_clock_task);
     }
 
 }
diff --git a/stratosphere/fatal/source/fatal_task_error_report.cpp b/stratosphere/fatal/source/fatal_task_error_report.cpp
index c482484a9..8f2f837e4 100644
--- a/stratosphere/fatal/source/fatal_task_error_report.cpp
+++ b/stratosphere/fatal/source/fatal_task_error_report.cpp
@@ -34,7 +34,7 @@ namespace ams::fatal::srv {
             /* Check if we have time service. */
             {
                 bool has_time_service = false;
-                if (R_FAILED(sm::HasService(&has_time_service, sm::ServiceName::Encode("time:s"))) || !has_time_service) {
+                if (R_FAILED(sm::HasService(std::addressof(has_time_service), sm::ServiceName::Encode("time:s"))) || !has_time_service) {
                     return false;
                 }
             }
@@ -73,7 +73,7 @@ namespace ams::fatal::srv {
 
             /* Get a timestamp. */
             u64 timestamp;
-            if (!TryGetCurrentTimestamp(&timestamp)) {
+            if (!TryGetCurrentTimestamp(std::addressof(timestamp))) {
                 timestamp = os::GetSystemTick().GetInt64Value();
             }
 
@@ -172,7 +172,7 @@ namespace ams::fatal::srv {
 
     ITask *GetErrorReportTask(const ThrowContext *ctx) {
         g_error_report_task.Initialize(ctx);
-        return &g_error_report_task;
+        return std::addressof(g_error_report_task);
     }
 
 }
diff --git a/stratosphere/fatal/source/fatal_task_power.cpp b/stratosphere/fatal/source/fatal_task_power.cpp
index f622d86dd..61569bf02 100644
--- a/stratosphere/fatal/source/fatal_task_power.cpp
+++ b/stratosphere/fatal/source/fatal_task_power.cpp
@@ -88,7 +88,7 @@ namespace ams::fatal::srv {
                     break;
                 }
 
-                if (R_FAILED(psmGetBatteryVoltageState(&bv_state)) || bv_state == PsmBatteryVoltageState_NeedsShutdown) {
+                if (R_FAILED(psmGetBatteryVoltageState(std::addressof(bv_state))) || bv_state == PsmBatteryVoltageState_NeedsShutdown) {
                     break;
                 }
 
@@ -112,7 +112,7 @@ namespace ams::fatal::srv {
             PsmBatteryVoltageState bv_state = PsmBatteryVoltageState_Normal;
 
             /* Check the battery state, and shutdown on low voltage. */
-            if (R_FAILED(psmGetBatteryVoltageState(&bv_state)) || bv_state == PsmBatteryVoltageState_NeedsShutdown) {
+            if (R_FAILED(psmGetBatteryVoltageState(std::addressof(bv_state))) || bv_state == PsmBatteryVoltageState_NeedsShutdown) {
                 /* Wait a second for the error report task to finish. */
                 this->context->erpt_event->TimedWait(TimeSpan::FromSeconds(1));
                 this->TryShutdown();
@@ -124,7 +124,7 @@ namespace ams::fatal::srv {
 
             /* Loop querying voltage state every 5 seconds. */
             while (true) {
-                if (R_FAILED(psmGetBatteryVoltageState(&bv_state))) {
+                if (R_FAILED(psmGetBatteryVoltageState(std::addressof(bv_state)))) {
                     bv_state = PsmBatteryVoltageState_NeedsShutdown;
                 }
 
@@ -181,7 +181,7 @@ namespace ams::fatal::srv {
                 if (fatal_reboot_helper.IsRebootTiming() || (quest_reboot_helper.IsRebootTiming()) ||
                     (check_vol_up && gpio::GetValue(std::addressof(vol_up_btn)) == gpio::GpioValue_Low) ||
                     (check_vol_down && gpio::GetValue(std::addressof(vol_down_btn)) == gpio::GpioValue_Low) ||
-                    (R_SUCCEEDED(bpcGetSleepButtonState(&state)) && state == BpcSleepButtonState_Held))
+                    (R_SUCCEEDED(bpcGetSleepButtonState(std::addressof(state))) && state == BpcSleepButtonState_Held))
                 {
                     /* If any of the above conditions succeeded, we should reboot. */
                     bpcRebootSystem();
@@ -214,17 +214,17 @@ namespace ams::fatal::srv {
 
     ITask *GetPowerControlTask(const ThrowContext *ctx) {
         g_power_control_task.Initialize(ctx);
-        return &g_power_control_task;
+        return std::addressof(g_power_control_task);
     }
 
     ITask *GetPowerButtonObserveTask(const ThrowContext *ctx) {
         g_power_button_observe_task.Initialize(ctx);
-        return &g_power_button_observe_task;
+        return std::addressof(g_power_button_observe_task);
     }
 
     ITask *GetStateTransitionStopTask(const ThrowContext *ctx) {
         g_state_transition_stop_task.Initialize(ctx);
-        return &g_state_transition_stop_task;
+        return std::addressof(g_state_transition_stop_task);
     }
 
 }
diff --git a/stratosphere/fatal/source/fatal_task_screen.cpp b/stratosphere/fatal/source/fatal_task_screen.cpp
index 504bdace5..6330da4e1 100644
--- a/stratosphere/fatal/source/fatal_task_screen.cpp
+++ b/stratosphere/fatal/source/fatal_task_screen.cpp
@@ -107,23 +107,23 @@ namespace ams::fatal::srv {
         Result ShowFatalTask::SetupDisplayInternal() {
             ViDisplay temp_display;
             /* Try to open the display. */
-            R_TRY_CATCH(viOpenDisplay("Internal", &temp_display)) {
+            R_TRY_CATCH(viOpenDisplay("Internal", std::addressof(temp_display))) {
                 R_CONVERT(vi::ResultNotFound, ResultSuccess());
             } R_END_TRY_CATCH;
 
             /* Guarantee we close the display. */
-            ON_SCOPE_EXIT { viCloseDisplay(&temp_display); };
+            ON_SCOPE_EXIT { viCloseDisplay(std::addressof(temp_display)); };
 
             /* Turn on the screen. */
             if (hos::GetVersion() >= hos::Version_3_0_0) {
-                R_TRY(viSetDisplayPowerState(&temp_display, ViPowerState_On));
+                R_TRY(viSetDisplayPowerState(std::addressof(temp_display), ViPowerState_On));
             } else {
                 /* Prior to 3.0.0, the ViPowerState enum was different (0 = Off, 1 = On). */
-                R_TRY(viSetDisplayPowerState(&temp_display, ViPowerState_On_Deprecated));
+                R_TRY(viSetDisplayPowerState(std::addressof(temp_display), ViPowerState_On_Deprecated));
             }
 
             /* Set alpha to 1.0f. */
-            R_TRY(viSetDisplayAlpha(&temp_display, 1.0f));
+            R_TRY(viSetDisplayAlpha(std::addressof(temp_display), 1.0f));
 
             return ResultSuccess();
         }
@@ -131,15 +131,15 @@ namespace ams::fatal::srv {
         Result ShowFatalTask::SetupDisplayExternal() {
             ViDisplay temp_display;
             /* Try to open the display. */
-            R_TRY_CATCH(viOpenDisplay("External", &temp_display)) {
+            R_TRY_CATCH(viOpenDisplay("External", std::addressof(temp_display))) {
                 R_CONVERT(vi::ResultNotFound, ResultSuccess());
             } R_END_TRY_CATCH;
 
             /* Guarantee we close the display. */
-            ON_SCOPE_EXIT { viCloseDisplay(&temp_display); };
+            ON_SCOPE_EXIT { viCloseDisplay(std::addressof(temp_display)); };
 
             /* Set alpha to 1.0f. */
-            R_TRY(viSetDisplayAlpha(&temp_display, 1.0f));
+            R_TRY(viSetDisplayAlpha(std::addressof(temp_display), 1.0f));
 
             return ResultSuccess();
         }
@@ -156,19 +156,19 @@ namespace ams::fatal::srv {
             R_TRY(SetupDisplayExternal());
 
             /* Open the default display. */
-            R_TRY(viOpenDefaultDisplay(&this->display));
+            R_TRY(viOpenDefaultDisplay(std::addressof(this->display)));
 
             /* Reset the display magnification to its default value. */
             s32 display_width, display_height;
-            R_TRY(viGetDisplayLogicalResolution(&this->display, &display_width, &display_height));
+            R_TRY(viGetDisplayLogicalResolution(std::addressof(this->display), std::addressof(display_width), std::addressof(display_height)));
 
             /* viSetDisplayMagnification was added in 3.0.0. */
             if (hos::GetVersion() >= hos::Version_3_0_0) {
-                R_TRY(viSetDisplayMagnification(&this->display, 0, 0, display_width, display_height));
+                R_TRY(viSetDisplayMagnification(std::addressof(this->display), 0, 0, display_width, display_height));
             }
 
             /* Create layer to draw to. */
-            R_TRY(viCreateLayer(&this->display, &this->layer));
+            R_TRY(viCreateLayer(std::addressof(this->display), std::addressof(this->layer)));
 
             /* Setup the layer. */
             {
@@ -183,16 +183,16 @@ namespace ams::fatal::srv {
                 const float layer_x = static_cast<float>((display_width - LayerWidth) / 2);
                 const float layer_y = static_cast<float>((display_height - LayerHeight) / 2);
 
-                R_TRY(viSetLayerSize(&this->layer, LayerWidth, LayerHeight));
+                R_TRY(viSetLayerSize(std::addressof(this->layer), LayerWidth, LayerHeight));
 
                 /* Set the layer's Z at display maximum, to be above everything else .*/
-                R_TRY(viSetLayerZ(&this->layer, FatalLayerZ));
+                R_TRY(viSetLayerZ(std::addressof(this->layer), FatalLayerZ));
 
                 /* Center the layer in the screen. */
-                R_TRY(viSetLayerPosition(&this->layer, layer_x, layer_y));
+                R_TRY(viSetLayerPosition(std::addressof(this->layer), layer_x, layer_y));
 
                 /* Create framebuffer. */
-                R_TRY(nwindowCreateFromLayer(&this->win, &this->layer));
+                R_TRY(nwindowCreateFromLayer(std::addressof(this->win), std::addressof(this->layer)));
                 R_TRY(this->InitializeNativeWindow());
             }
 
@@ -439,7 +439,7 @@ namespace ams::fatal::srv {
             R_TRY(nvFenceInit());
 
             /* Create nvmap. */
-            R_TRY(nvMapCreate(&this->map, g_framebuffer_memory, sizeof(g_framebuffer_memory), 0x20000, NvKind_Pitch, true));
+            R_TRY(nvMapCreate(std::addressof(this->map), g_framebuffer_memory, sizeof(g_framebuffer_memory), 0x20000, NvKind_Pitch, true));
 
             /* Setup graphics buffer. */
             {
@@ -458,14 +458,14 @@ namespace ams::fatal::srv {
                 grbuf.planes[0].layout              = NvLayout_BlockLinear;
                 grbuf.planes[0].kind                = NvKind_Generic_16BX2;
                 grbuf.planes[0].block_height_log2   = 4;
-                grbuf.nvmap_id                      = nvMapGetId(&this->map);
+                grbuf.nvmap_id                      = nvMapGetId(std::addressof(this->map));
                 grbuf.stride                        = FatalScreenWidthAligned;
                 grbuf.total_size                    = sizeof(g_framebuffer_memory);
                 grbuf.planes[0].pitch               = FatalScreenWidthAlignedBytes;
                 grbuf.planes[0].size                = sizeof(g_framebuffer_memory);
                 grbuf.planes[0].offset              = 0;
 
-                R_TRY(nwindowConfigureBuffer(&this->win, 0, &grbuf));
+                R_TRY(nwindowConfigureBuffer(std::addressof(this->win), 0, std::addressof(grbuf)));
             }
 
             return ResultSuccess();
@@ -473,9 +473,9 @@ namespace ams::fatal::srv {
 
         void ShowFatalTask::DisplayPreRenderedFrame() {
             s32 slot;
-            R_ABORT_UNLESS(nwindowDequeueBuffer(&this->win, &slot, nullptr));
+            R_ABORT_UNLESS(nwindowDequeueBuffer(std::addressof(this->win), std::addressof(slot), nullptr));
             dd::FlushDataCache(g_framebuffer_memory, sizeof(g_framebuffer_memory));
-            R_ABORT_UNLESS(nwindowQueueBuffer(&this->win, this->win.cur_slot, NULL));
+            R_ABORT_UNLESS(nwindowQueueBuffer(std::addressof(this->win), this->win.cur_slot, NULL));
         }
 
         Result ShowFatalTask::ShowFatal() {
@@ -511,12 +511,12 @@ namespace ams::fatal::srv {
 
     ITask *GetShowFatalTask(const ThrowContext *ctx) {
         g_show_fatal_task.Initialize(ctx);
-        return &g_show_fatal_task;
+        return std::addressof(g_show_fatal_task);
     }
 
     ITask *GetBacklightControlTask(const ThrowContext *ctx) {
         g_backlight_control_task.Initialize(ctx);
-        return &g_backlight_control_task;
+        return std::addressof(g_backlight_control_task);
     }
 
 }
diff --git a/stratosphere/fatal/source/fatal_task_sound.cpp b/stratosphere/fatal/source/fatal_task_sound.cpp
index 580fc9291..06849c60c 100644
--- a/stratosphere/fatal/source/fatal_task_sound.cpp
+++ b/stratosphere/fatal/source/fatal_task_sound.cpp
@@ -39,8 +39,8 @@ namespace ams::fatal::srv {
             /* Talk to the ALC5639 over I2C, and disable audio output. */
             {
                 I2cSession audio;
-                if (R_SUCCEEDED(i2cOpenSession(&audio, I2cDevice_Alc5639))) {
-                    ON_SCOPE_EXIT { i2csessionClose(&audio); };
+                if (R_SUCCEEDED(i2cOpenSession(std::addressof(audio), I2cDevice_Alc5639))) {
+                    ON_SCOPE_EXIT { i2csessionClose(std::addressof(audio)); };
 
                     struct {
                         u8 reg;
@@ -50,16 +50,16 @@ namespace ams::fatal::srv {
 
                     cmd.reg = 0x01;
                     cmd.val = 0xC8C8;
-                    i2csessionSendAuto(&audio, &cmd, sizeof(cmd), I2cTransactionOption_All);
+                    i2csessionSendAuto(std::addressof(audio), std::addressof(cmd), sizeof(cmd), I2cTransactionOption_All);
 
                     cmd.reg = 0x02;
                     cmd.val = 0xC8C8;
-                    i2csessionSendAuto(&audio, &cmd, sizeof(cmd), I2cTransactionOption_All);
+                    i2csessionSendAuto(std::addressof(audio), std::addressof(cmd), sizeof(cmd), I2cTransactionOption_All);
 
                     for (u8 reg = 97; reg <= 102; reg++) {
                         cmd.reg = reg;
                         cmd.val = 0;
-                        i2csessionSendAuto(&audio, &cmd, sizeof(cmd), I2cTransactionOption_All);
+                        i2csessionSendAuto(std::addressof(audio), std::addressof(cmd), sizeof(cmd), I2cTransactionOption_All);
                     }
                 }
             }
@@ -89,7 +89,7 @@ namespace ams::fatal::srv {
 
     ITask *GetStopSoundTask(const ThrowContext *ctx) {
         g_stop_sound_task.Initialize(ctx);
-        return &g_stop_sound_task;
+        return std::addressof(g_stop_sound_task);
     }
 
 }
diff --git a/stratosphere/loader/source/ldr_loader_service.cpp b/stratosphere/loader/source/ldr_loader_service.cpp
index 96747115c..5d678b4f0 100644
--- a/stratosphere/loader/source/ldr_loader_service.cpp
+++ b/stratosphere/loader/source/ldr_loader_service.cpp
@@ -31,7 +31,7 @@ namespace ams::ldr {
             std::memset(out, 0, sizeof(*out));
             cfg::OverrideStatus status = {};
 
-            R_TRY(ldr::GetProgramInfo(out, &status, loc));
+            R_TRY(ldr::GetProgramInfo(out, std::addressof(status), loc));
 
             if (loc.storage_id != static_cast<u8>(ncm::StorageId::None) && loc.program_id != out->program_id) {
                 char path[fs::EntryNameLengthMax];
@@ -64,7 +64,7 @@ namespace ams::ldr {
         char path[fs::EntryNameLengthMax];
 
         /* Get location and override status. */
-        R_TRY(ldr::ro::GetProgramLocationAndStatus(&loc, &override_status, id));
+        R_TRY(ldr::ro::GetProgramLocationAndStatus(std::addressof(loc), std::addressof(override_status), id));
 
         if (loc.storage_id != static_cast<u8>(ncm::StorageId::None)) {
             R_TRY(ResolveContentPath(path, loc));
diff --git a/stratosphere/loader/source/ldr_meta.cpp b/stratosphere/loader/source/ldr_meta.cpp
index 696b84398..d4936570b 100644
--- a/stratosphere/loader/source/ldr_meta.cpp
+++ b/stratosphere/loader/source/ldr_meta.cpp
@@ -156,7 +156,7 @@ namespace ams::ldr {
 
             /* Validate the meta. */
             {
-                Meta *meta = &cache->meta;
+                Meta *meta = std::addressof(cache->meta);
 
                 Npdm *npdm = reinterpret_cast<Npdm *>(cache->buffer);
                 R_TRY(ValidateNpdm(npdm, npdm_size));
@@ -194,11 +194,11 @@ namespace ams::ldr {
         R_TRY(fs::OpenFile(std::addressof(file), AtmosphereMetaPath, fs::OpenMode_Read));
         {
             ON_SCOPE_EXIT { fs::CloseFile(file); };
-            R_TRY(LoadMetaFromFile(file, &g_meta_cache));
+            R_TRY(LoadMetaFromFile(file, std::addressof(g_meta_cache)));
         }
 
         /* Patch meta. Start by setting all program ids to the current program id. */
-        Meta *meta = &g_meta_cache.meta;
+        Meta *meta = std::addressof(g_meta_cache.meta);
         meta->acid->program_id_min = loc.program_id;
         meta->acid->program_id_max = loc.program_id;
         meta->aci->program_id      = loc.program_id;
@@ -209,8 +209,8 @@ namespace ams::ldr {
                 ON_SCOPE_EXIT { fs::CloseFile(file); };
 
 
-                if (R_SUCCEEDED(LoadMetaFromFile(file, &g_original_meta_cache))) {
-                    Meta *o_meta = &g_original_meta_cache.meta;
+                if (R_SUCCEEDED(LoadMetaFromFile(file, std::addressof(g_original_meta_cache)))) {
+                    Meta *o_meta = std::addressof(g_original_meta_cache.meta);
 
                     /* Fix pool partition. */
                     if (hos::GetVersion() >= hos::Version_5_0_0) {
@@ -253,8 +253,8 @@ namespace ams::ldr {
             if (static_cast<ncm::StorageId>(loc.storage_id) != ncm::StorageId::None || ncm::IsApplicationId(loc.program_id)) {
                 R_TRY(fs::OpenFile(std::addressof(file), BaseMetaPath, fs::OpenMode_Read));
                 ON_SCOPE_EXIT { fs::CloseFile(file); };
-                R_TRY(LoadMetaFromFile(file, &g_original_meta_cache));
-                R_TRY(ValidateAcidSignature(&g_original_meta_cache.meta));
+                R_TRY(LoadMetaFromFile(file, std::addressof(g_original_meta_cache)));
+                R_TRY(ValidateAcidSignature(std::addressof(g_original_meta_cache.meta)));
                 meta->modulus                 = g_original_meta_cache.meta.modulus;
                 meta->check_verification_data = g_original_meta_cache.meta.check_verification_data;
             }
diff --git a/stratosphere/loader/source/ldr_patcher.cpp b/stratosphere/loader/source/ldr_patcher.cpp
index 1dd9a515f..6764ec093 100644
--- a/stratosphere/loader/source/ldr_patcher.cpp
+++ b/stratosphere/loader/source/ldr_patcher.cpp
@@ -118,15 +118,15 @@ namespace ams::ldr {
         }
 
         ro::ModuleId module_id;
-        std::memcpy(&module_id.build_id, build_id, sizeof(module_id.build_id));
-        ams::patcher::LocateAndApplyIpsPatchesToModule(LoaderSdMountName, NsoPatchesDirectory, NsoPatchesProtectedSize, NsoPatchesProtectedOffset, &module_id, reinterpret_cast<u8 *>(mapped_nso), mapped_size);
+        std::memcpy(std::addressof(module_id.build_id), build_id, sizeof(module_id.build_id));
+        ams::patcher::LocateAndApplyIpsPatchesToModule(LoaderSdMountName, NsoPatchesDirectory, NsoPatchesProtectedSize, NsoPatchesProtectedOffset, std::addressof(module_id), reinterpret_cast<u8 *>(mapped_nso), mapped_size);
     }
 
     /* Apply embedded patches. */
     void ApplyEmbeddedPatchesToModule(const u8 *build_id, uintptr_t mapped_nso, size_t mapped_size) {
         /* Make module id. */
         ro::ModuleId module_id;
-        std::memcpy(&module_id.build_id, build_id, sizeof(module_id.build_id));
+        std::memcpy(std::addressof(module_id.build_id), build_id, sizeof(module_id.build_id));
 
         if (IsUsb30ForceEnabled()) {
             for (const auto &patch : Usb30ForceEnablePatches) {
diff --git a/stratosphere/loader/source/ldr_process_creation.cpp b/stratosphere/loader/source/ldr_process_creation.cpp
index fc8371775..a2a40c72d 100644
--- a/stratosphere/loader/source/ldr_process_creation.cpp
+++ b/stratosphere/loader/source/ldr_process_creation.cpp
@@ -346,7 +346,7 @@ namespace ams::ldr {
             out->reslimit = reslimit_h;
 
             /* Set flags. */
-            R_TRY(GetCreateProcessFlags(&out->flags, meta, flags));
+            R_TRY(GetCreateProcessFlags(std::addressof(out->flags), meta, flags));
 
             /* 3.0.0+ System Resource Size. */
             if (hos::GetVersion() >= hos::Version_3_0_0) {
@@ -574,11 +574,11 @@ namespace ams::ldr {
                 R_TRY(map.GetResult());
 
                 /* Load NSO segments. */
-                R_TRY(LoadNsoSegment(file, &nso_header->segments[NsoHeader::Segment_Text], nso_header->text_compressed_size, nso_header->text_hash, (nso_header->flags & NsoHeader::Flag_CompressedText) != 0,
+                R_TRY(LoadNsoSegment(file, std::addressof(nso_header->segments[NsoHeader::Segment_Text]), nso_header->text_compressed_size, nso_header->text_hash, (nso_header->flags & NsoHeader::Flag_CompressedText) != 0,
                                            (nso_header->flags & NsoHeader::Flag_CheckHashText) != 0, map_address + nso_header->text_dst_offset, map_address + nso_size));
-                R_TRY(LoadNsoSegment(file, &nso_header->segments[NsoHeader::Segment_Ro], nso_header->ro_compressed_size, nso_header->ro_hash, (nso_header->flags & NsoHeader::Flag_CompressedRo) != 0,
+                R_TRY(LoadNsoSegment(file, std::addressof(nso_header->segments[NsoHeader::Segment_Ro]), nso_header->ro_compressed_size, nso_header->ro_hash, (nso_header->flags & NsoHeader::Flag_CompressedRo) != 0,
                                            (nso_header->flags & NsoHeader::Flag_CheckHashRo) != 0, map_address + nso_header->ro_dst_offset, map_address + nso_size));
-                R_TRY(LoadNsoSegment(file, &nso_header->segments[NsoHeader::Segment_Rw], nso_header->rw_compressed_size, nso_header->rw_hash, (nso_header->flags & NsoHeader::Flag_CompressedRw) != 0,
+                R_TRY(LoadNsoSegment(file, std::addressof(nso_header->segments[NsoHeader::Segment_Rw]), nso_header->rw_compressed_size, nso_header->rw_hash, (nso_header->flags & NsoHeader::Flag_CompressedRw) != 0,
                                            (nso_header->flags & NsoHeader::Flag_CheckHashRw) != 0, map_address + nso_header->rw_dst_offset, map_address + nso_size));
 
                 /* Clear unused space to zero. */
@@ -670,10 +670,10 @@ namespace ams::ldr {
 
             /* Load meta, possibly from cache. */
             Meta meta;
-            R_TRY(LoadMetaFromCache(&meta, loc, override_status));
+            R_TRY(LoadMetaFromCache(std::addressof(meta), loc, override_status));
 
             /* Validate meta. */
-            R_TRY(ValidateMeta(&meta, loc, mount.GetCodeVerificationData()));
+            R_TRY(ValidateMeta(std::addressof(meta), loc, mount.GetCodeVerificationData()));
 
             /* Load, validate NSOs. */
             R_TRY(LoadNsoHeaders(nso_headers, has_nso));
@@ -681,13 +681,13 @@ namespace ams::ldr {
 
             /* Actually create process. */
             ProcessInfo info;
-            R_TRY(CreateProcessImpl(&info, &meta, nso_headers, has_nso, arg_info, flags, reslimit_h));
+            R_TRY(CreateProcessImpl(std::addressof(info), std::addressof(meta), nso_headers, has_nso, arg_info, flags, reslimit_h));
 
             /* Ensure we close the process handle, if we fail. */
             ON_SCOPE_EXIT { os::CloseNativeHandle(info.process_handle); };
 
             /* Load NSOs into process memory. */
-            R_TRY(LoadNsosIntoProcessMemory(&info, nso_headers, has_nso, arg_info));
+            R_TRY(LoadNsosIntoProcessMemory(std::addressof(info), nso_headers, has_nso, arg_info));
 
             /* Register NSOs with ro manager. */
             {
@@ -732,13 +732,13 @@ namespace ams::ldr {
         {
             ScopedCodeMount mount(loc);
             R_TRY(mount.GetResult());
-            R_TRY(LoadMeta(&meta, loc, mount.GetOverrideStatus()));
+            R_TRY(LoadMeta(std::addressof(meta), loc, mount.GetOverrideStatus()));
             if (out_status != nullptr) {
                 *out_status = mount.GetOverrideStatus();
             }
         }
 
-        return GetProgramInfoFromMeta(out, &meta);
+        return GetProgramInfoFromMeta(out, std::addressof(meta));
     }
 
 }
diff --git a/stratosphere/pm/source/impl/pm_process_info.cpp b/stratosphere/pm/source/impl/pm_process_info.cpp
index da4c105c2..ec1e257e8 100644
--- a/stratosphere/pm/source/impl/pm_process_info.cpp
+++ b/stratosphere/pm/source/impl/pm_process_info.cpp
@@ -30,7 +30,7 @@ namespace ams::pm::impl {
     void ProcessInfo::Cleanup() {
         if (this->handle != os::InvalidNativeHandle) {
             /* Unregister the process. */
-            fsprUnregisterProgram(static_cast<u64>(this->process_id));
+            fsprUnregisterProgram(this->process_id.value);
             sm::manager::UnregisterProcess(this->process_id);
             ldr::pm::UnpinProgram(this->pin_id);
 
diff --git a/stratosphere/pm/source/impl/pm_process_info.hpp b/stratosphere/pm/source/impl/pm_process_info.hpp
index b57ed2873..527035408 100644
--- a/stratosphere/pm/source/impl/pm_process_info.hpp
+++ b/stratosphere/pm/source/impl/pm_process_info.hpp
@@ -186,7 +186,7 @@ namespace ams::pm::impl {
             ProcessInfo *Find(os::ProcessId process_id) {
                 for (auto it = this->begin(); it != this->end(); it++) {
                     if ((*it).GetProcessId() == process_id) {
-                        return &*it;
+                        return std::addressof(*it);
                     }
                 }
                 return nullptr;
@@ -195,7 +195,7 @@ namespace ams::pm::impl {
             ProcessInfo *Find(ncm::ProgramId program_id) {
                 for (auto it = this->begin(); it != this->end(); it++) {
                     if ((*it).GetProgramLocation().program_id == program_id) {
-                        return &*it;
+                        return std::addressof(*it);
                     }
                 }
                 return nullptr;
@@ -216,11 +216,11 @@ namespace ams::pm::impl {
             }
 
             ProcessList *operator->() {
-                return &this->list;
+                return std::addressof(this->list);
             }
 
             const ProcessList *operator->() const {
-                return &this->list;
+                return std::addressof(this->list);
             }
 
             ProcessList &operator*() {
diff --git a/stratosphere/pm/source/impl/pm_process_manager.cpp b/stratosphere/pm/source/impl/pm_process_manager.cpp
index 2d58009d9..eed499c78 100644
--- a/stratosphere/pm/source/impl/pm_process_manager.cpp
+++ b/stratosphere/pm/source/impl/pm_process_manager.cpp
@@ -166,7 +166,7 @@ namespace ams::pm::impl {
 
             while (true) {
                 auto signaled_holder = os::WaitAny(std::addressof(process_multi_wait));
-                if (signaled_holder == &start_event_holder) {
+                if (signaled_holder == std::addressof(start_event_holder)) {
                     /* Launch start event signaled. */
                     /* TryWait will clear signaled, preventing duplicate notifications. */
                     if (g_process_launch_start_event.TryWait()) {
@@ -224,7 +224,7 @@ namespace ams::pm::impl {
             /* Get Program Info. */
             ldr::ProgramInfo program_info;
             cfg::OverrideStatus override_status;
-            R_TRY(ldr::pm::AtmosphereGetProgramInfo(&program_info, &override_status, args.location));
+            R_TRY(ldr::pm::AtmosphereGetProgramInfo(std::addressof(program_info), std::addressof(override_status), args.location));
             const bool is_application = (program_info.flags & ldr::ProgramInfoFlag_ApplicationTypeMask) == ldr::ProgramInfoFlag_Application;
             const bool allow_debug    = (program_info.flags & ldr::ProgramInfoFlag_AllowDebug) || hos::GetVersion() < hos::Version_2_0_0;
 
@@ -236,16 +236,16 @@ namespace ams::pm::impl {
 
             /* Pin the program with loader. */
             ldr::PinId pin_id;
-            R_TRY(ldr::pm::AtmospherePinProgram(&pin_id, location, override_status));
+            R_TRY(ldr::pm::AtmospherePinProgram(std::addressof(pin_id), location, override_status));
 
             /* Ensure resources are available. */
-            resource::WaitResourceAvailable(&program_info);
+            resource::WaitResourceAvailable(std::addressof(program_info));
 
             /* Actually create the process. */
             os::NativeHandle process_handle;
             {
                 auto pin_guard = SCOPE_GUARD { ldr::pm::UnpinProgram(pin_id); };
-                R_TRY(ldr::pm::CreateProcess(&process_handle, pin_id, GetLoaderCreateProcessFlags(args.flags), resource::GetResourceLimitHandle(&program_info)));
+                R_TRY(ldr::pm::CreateProcess(std::addressof(process_handle), pin_id, GetLoaderCreateProcessFlags(args.flags), resource::GetResourceLimitHandle(std::addressof(program_info))));
                 pin_guard.Cancel();
             }
 
@@ -301,7 +301,7 @@ namespace ams::pm::impl {
                 os::SignalSystemEvent(std::addressof(g_hook_to_create_application_process_event));
                 g_application_hook = false;
             } else if (!ShouldStartSuspended(args.flags)) {
-                R_TRY(StartProcess(process_info, &program_info));
+                R_TRY(StartProcess(process_info, std::addressof(program_info)));
             }
 
             /* We succeeded, so we can cancel our cleanup. */
@@ -319,7 +319,7 @@ namespace ams::pm::impl {
             const svc::ProcessState old_state = process_info->GetState();
             {
                 s64 tmp = 0;
-                R_ABORT_UNLESS(svc::GetProcessInfo(&tmp, process_info->GetHandle(), svc::ProcessInfoType_ProcessState));
+                R_ABORT_UNLESS(svc::GetProcessInfo(std::addressof(tmp), process_info->GetHandle(), svc::ProcessInfoType_ProcessState));
                 process_info->SetState(static_cast<svc::ProcessState>(tmp));
             }
             const svc::ProcessState new_state = process_info->GetState();
@@ -445,8 +445,8 @@ namespace ams::pm::impl {
         R_UNLESS(!process_info->HasStarted(), pm::ResultAlreadyStarted());
 
         ldr::ProgramInfo program_info;
-        R_TRY(ldr::pm::GetProgramInfo(&program_info, process_info->GetProgramLocation()));
-        return StartProcess(process_info, &program_info);
+        R_TRY(ldr::pm::GetProgramInfo(std::addressof(program_info), process_info->GetProgramLocation()));
+        return StartProcess(process_info, std::addressof(program_info));
     }
 
     Result TerminateProcess(os::ProcessId process_id) {
@@ -518,7 +518,7 @@ namespace ams::pm::impl {
                 out->event = GetProcessEventValue(ProcessEvent::Exited);
                 out->process_id = process_info.GetProcessId();
 
-                CleanupProcessInfo(dead_list, &process_info);
+                CleanupProcessInfo(dead_list, std::addressof(process_info));
                 return ResultSuccess();
             }
         }
diff --git a/stratosphere/pm/source/pm_main.cpp b/stratosphere/pm/source/pm_main.cpp
index 085daaa92..eed73ce30 100644
--- a/stratosphere/pm/source/pm_main.cpp
+++ b/stratosphere/pm/source/pm_main.cpp
@@ -61,7 +61,7 @@ namespace ams {
             void RegisterPrivilegedProcesses() {
                 /* Get privileged process range. */
                 os::ProcessId min_priv_process_id = os::InvalidProcessId, max_priv_process_id = os::InvalidProcessId;
-                cfg::GetInitialProcessRange(&min_priv_process_id, &max_priv_process_id);
+                cfg::GetInitialProcessRange(std::addressof(min_priv_process_id), std::addressof(max_priv_process_id));
 
                 /* Get current process id/program id. */
                 const auto cur_process_id = os::GetCurrentProcessId();
@@ -70,7 +70,7 @@ namespace ams {
                 /* Get list of processes, register all privileged ones. */
                 s32 num_pids;
                 os::ProcessId pids[ProcessCountMax];
-                R_ABORT_UNLESS(svc::GetProcessList(&num_pids, reinterpret_cast<u64 *>(pids), ProcessCountMax));
+                R_ABORT_UNLESS(svc::GetProcessList(std::addressof(num_pids), reinterpret_cast<u64 *>(pids), ProcessCountMax));
                 for (s32 i = 0; i < num_pids; i++) {
                     if (min_priv_process_id <= pids[i] && pids[i] <= max_priv_process_id) {
                         RegisterPrivilegedProcess(pids[i], pids[i] == cur_process_id ? cur_program_id : GetProcessProgramId(pids[i]));
diff --git a/stratosphere/ro/source/impl/ro_service_impl.cpp b/stratosphere/ro/source/impl/ro_service_impl.cpp
index 835c26107..1e9c343b5 100644
--- a/stratosphere/ro/source/impl/ro_service_impl.cpp
+++ b/stratosphere/ro/source/impl/ro_service_impl.cpp
@@ -364,7 +364,7 @@ namespace ams::ro::impl {
     bool ShouldEaseNroRestriction() {
         /* Retrieve whether we should ease restrictions from set:sys. */
         u8 should_ease = 0;
-        if (settings::fwdbg::GetSettingsItemValue(&should_ease, sizeof(should_ease), "ro", "ease_nro_restriction") != sizeof(should_ease)) {
+        if (settings::fwdbg::GetSettingsItemValue(std::addressof(should_ease), sizeof(should_ease), "ro", "ease_nro_restriction") != sizeof(should_ease)) {
             return false;
         }
 
@@ -379,7 +379,7 @@ namespace ams::ro::impl {
         {
             /* Validate handle is a valid process handle. */
             os::ProcessId handle_pid;
-            R_UNLESS(R_SUCCEEDED(os::GetProcessId(&handle_pid, process_handle.GetOsHandle())), ro::ResultInvalidProcess());
+            R_UNLESS(R_SUCCEEDED(os::GetProcessId(std::addressof(handle_pid), process_handle.GetOsHandle())), ro::ResultInvalidProcess());
 
             /* Validate process id. */
             R_UNLESS(handle_pid == process_id, ro::ResultInvalidProcess());
@@ -420,7 +420,7 @@ namespace ams::ro::impl {
 
         /* Check we have space for a new NRR. */
         NrrInfo *nrr_info = nullptr;
-        R_TRY(context->GetFreeNrrInfo(&nrr_info));
+        R_TRY(context->GetFreeNrrInfo(std::addressof(nrr_info)));
 
         /* Prepare to cache the NRR's signature hash. */
         Sha256Hash signed_area_hash;
@@ -429,7 +429,7 @@ namespace ams::ro::impl {
         /* Map. */
         NrrHeader *header = nullptr;
         u64 mapped_code_address = 0;
-        R_TRY(MapAndValidateNrr(&header, &mapped_code_address, std::addressof(signed_area_hash), sizeof(signed_area_hash), context->process_handle, program_id, nrr_address, nrr_size, nrr_kind, enforce_nrr_kind));
+        R_TRY(MapAndValidateNrr(std::addressof(header), std::addressof(mapped_code_address), std::addressof(signed_area_hash), sizeof(signed_area_hash), context->process_handle, program_id, nrr_address, nrr_size, nrr_kind, enforce_nrr_kind));
 
         /* Set NRR info. */
         context->SetNrrInfoInUse(nrr_info, true);
@@ -458,7 +458,7 @@ namespace ams::ro::impl {
 
         /* Check the NRR is loaded. */
         NrrInfo *nrr_info = nullptr;
-        R_TRY(context->GetNrrInfoByAddress(&nrr_info, nrr_address));
+        R_TRY(context->GetNrrInfoByAddress(std::addressof(nrr_info), nrr_address));
 
         /* Unmap. */
         const NrrInfo nrr_backup = *nrr_info;
@@ -485,20 +485,20 @@ namespace ams::ro::impl {
 
         /* Check we have space for a new NRO. */
         NroInfo *nro_info = nullptr;
-        R_TRY(context->GetFreeNroInfo(&nro_info));
+        R_TRY(context->GetFreeNroInfo(std::addressof(nro_info)));
         nro_info->nro_heap_address = nro_address;
         nro_info->nro_heap_size = nro_size;
         nro_info->bss_heap_address = bss_address;
         nro_info->bss_heap_size = bss_size;
 
         /* Map the NRO. */
-        R_TRY(MapNro(&nro_info->base_address, context->process_handle, nro_address, nro_size, bss_address, bss_size));
+        R_TRY(MapNro(std::addressof(nro_info->base_address), context->process_handle, nro_address, nro_size, bss_address, bss_size));
 
         /* Validate the NRO (parsing region extents). */
         u64 rx_size = 0, ro_size = 0, rw_size = 0;
         {
             auto unmap_guard = SCOPE_GUARD { UnmapNro(context->process_handle, nro_info->base_address, nro_address, bss_address, bss_size, nro_size, 0); };
-            R_TRY(context->ValidateNro(&nro_info->module_id, &rx_size, &ro_size, &rw_size, nro_info->base_address, nro_size, bss_size));
+            R_TRY(context->ValidateNro(std::addressof(nro_info->module_id), std::addressof(rx_size), std::addressof(ro_size), std::addressof(rw_size), nro_info->base_address, nro_size, bss_size));
             unmap_guard.Cancel();
         }
 
@@ -526,7 +526,7 @@ namespace ams::ro::impl {
 
         /* Check the NRO is loaded. */
         NroInfo *nro_info = nullptr;
-        R_TRY(context->GetNroInfoByAddress(&nro_info, nro_address));
+        R_TRY(context->GetNroInfoByAddress(std::addressof(nro_info), nro_address));
 
         /* Unmap. */
         const NroInfo nro_backup = *nro_info;
@@ -552,7 +552,7 @@ namespace ams::ro::impl {
 
                 /* Just copy out the info. */
                 LoaderModuleInfo *out_info = std::addressof(out_infos[count++]);
-                memcpy(out_info->build_id, &nro_info->module_id, sizeof(nro_info->module_id));
+                memcpy(out_info->build_id, std::addressof(nro_info->module_id), sizeof(nro_info->module_id));
                 out_info->base_address = nro_info->base_address;
                 out_info->size = nro_info->nro_heap_size + nro_info->bss_heap_size;
             }
diff --git a/stratosphere/sm/source/impl/sm_service_manager.cpp b/stratosphere/sm/source/impl/sm_service_manager.cpp
index 50ad9b8ad..4e042ea8b 100644
--- a/stratosphere/sm/source/impl/sm_service_manager.cpp
+++ b/stratosphere/sm/source/impl/sm_service_manager.cpp
@@ -127,7 +127,7 @@ namespace ams::sm::impl {
             public:
                 InitialProcessIdLimits() {
                     /* Retrieve process limits. */
-                    cfg::GetInitialProcessRange(&this->min, &this->max);
+                    cfg::GetInitialProcessRange(std::addressof(this->min), std::addressof(this->max));
 
                     /* Ensure range is sane. */
                     AMS_ABORT_UNLESS(this->min <= this->max);
@@ -538,7 +538,7 @@ namespace ams::sm::impl {
 
         /* Check that we have the service. */
         bool has_service = false;
-        R_TRY(impl::HasService(&has_service, service));
+        R_TRY(impl::HasService(std::addressof(has_service), service));
 
         /* If we do, we can succeed immediately. */
         R_SUCCEED_IF(has_service);
diff --git a/stratosphere/spl/source/spl_api_impl.cpp b/stratosphere/spl/source/spl_api_impl.cpp
index e349dfcca..70b762121 100644
--- a/stratosphere/spl/source/spl_api_impl.cpp
+++ b/stratosphere/spl/source/spl_api_impl.cpp
@@ -203,7 +203,7 @@ namespace ams::spl::impl {
                 }
 
                 Result Allocate() {
-                    R_TRY(AllocateAesKeySlot(&this->slot, this));
+                    R_TRY(AllocateAesKeySlot(std::addressof(this->slot), this));
                     this->has_slot = true;
                     return ResultSuccess();
                 }
@@ -269,7 +269,7 @@ namespace ams::spl::impl {
 
         void InitializeSeEvents() {
             u64 irq_num;
-            AMS_ABORT_UNLESS(smc::GetConfig(&irq_num, 1, ConfigItem::SecurityEngineInterruptNumber) == smc::Result::Success);
+            AMS_ABORT_UNLESS(smc::GetConfig(std::addressof(irq_num), 1, ConfigItem::SecurityEngineInterruptNumber) == smc::Result::Success);
             os::InitializeInterruptEvent(std::addressof(g_se_event), irq_num, os::EventClearMode_AutoClear);
 
             R_ABORT_UNLESS(os::CreateSystemEvent(std::addressof(g_se_keyslot_available_event), os::EventClearMode_AutoClear, true));
@@ -279,7 +279,7 @@ namespace ams::spl::impl {
         void InitializeDeviceAddressSpace() {
 
             /* Create Address Space. */
-            R_ABORT_UNLESS(svc::CreateDeviceAddressSpace(&g_se_das_hnd, 0, (1ul << 32)));
+            R_ABORT_UNLESS(svc::CreateDeviceAddressSpace(std::addressof(g_se_das_hnd), 0, (1ul << 32)));
 
             /* Attach it to the SE. */
             R_ABORT_UNLESS(svc::AttachDeviceAddressSpace(svc::DeviceName_Se, g_se_das_hnd));
@@ -320,7 +320,7 @@ namespace ams::spl::impl {
             WaitSeOperationComplete();
 
             smc::Result op_res;
-            smc::Result res = smc::GetResult(&op_res, op_key);
+            smc::Result res = smc::GetResult(std::addressof(op_res), op_key);
             if (res != smc::Result::Success) {
                 return res;
             }
@@ -332,7 +332,7 @@ namespace ams::spl::impl {
             WaitSeOperationComplete();
 
             smc::Result op_res;
-            smc::Result res = smc::GetResultData(&op_res, out_buf, out_buf_size, op_key);
+            smc::Result res = smc::GetResultData(std::addressof(op_res), out_buf, out_buf_size, op_key);
             if (res != smc::Result::Success) {
                 return res;
             }
@@ -381,7 +381,7 @@ namespace ams::spl::impl {
                 const u32 dst_ll_addr = g_se_mapped_work_buffer_addr + offsetof(DecryptAesBlockLayout, crypt_ctx.out);
                 const u32 src_ll_addr = g_se_mapped_work_buffer_addr + offsetof(DecryptAesBlockLayout, crypt_ctx.in);
 
-                smc::Result res = smc::ComputeAes(&op_key, mode, iv_ctr, dst_ll_addr, src_ll_addr, sizeof(layout->in_block));
+                smc::Result res = smc::ComputeAes(std::addressof(op_key), mode, iv_ctr, dst_ll_addr, src_ll_addr, sizeof(layout->in_block));
                 if (res != smc::Result::Success) {
                     return res;
                 }
@@ -443,7 +443,7 @@ namespace ams::spl::impl {
                 std::scoped_lock lk(g_async_op_lock);
                 smc::AsyncOperationKey op_key;
 
-                smc::Result res = smc::ModularExponentiateWithStorageKey(&op_key, layout->base, layout->mod, mode);
+                smc::Result res = smc::ModularExponentiateWithStorageKey(std::addressof(op_key), layout->base, layout->mod, mode);
                 if (res != smc::Result::Success) {
                     return smc::ConvertResult(res);
                 }
@@ -483,7 +483,7 @@ namespace ams::spl::impl {
                 std::scoped_lock lk(g_async_op_lock);
                 smc::AsyncOperationKey op_key;
 
-                smc::Result res = smc::PrepareEsDeviceUniqueKey(&op_key, layout->base, layout->mod, label_digest, label_digest_size, smc::GetPrepareEsDeviceUniqueKeyOption(type, generation));
+                smc::Result res = smc::PrepareEsDeviceUniqueKey(std::addressof(op_key), layout->base, layout->mod, label_digest, label_digest_size, smc::GetPrepareEsDeviceUniqueKeyOption(type, generation));
                 if (res != smc::Result::Success) {
                     return smc::ConvertResult(res);
                 }
@@ -571,7 +571,7 @@ namespace ams::spl::impl {
             std::scoped_lock lk(g_async_op_lock);
             smc::AsyncOperationKey op_key;
 
-            smc::Result res = smc::ModularExponentiate(&op_key, layout->base, layout->exp, exp_size, layout->mod);
+            smc::Result res = smc::ModularExponentiate(std::addressof(op_key), layout->base, layout->exp, exp_size, layout->mod);
             if (res != smc::Result::Success) {
                 return smc::ConvertResult(res);
             }
@@ -587,7 +587,7 @@ namespace ams::spl::impl {
     }
 
     Result SetConfig(ConfigItem which, u64 value) {
-        return smc::ConvertResult(smc::SetConfig(which, &value, 1));
+        return smc::ConvertResult(smc::SetConfig(which, std::addressof(value), 1));
     }
 
     Result GenerateRandomBytes(void *out, size_t size) {
@@ -605,7 +605,7 @@ namespace ams::spl::impl {
 
     Result IsDevelopment(bool *out) {
         u64 hardware_state;
-        R_TRY(impl::GetConfig(&hardware_state, ConfigItem::HardwareState));
+        R_TRY(impl::GetConfig(std::addressof(hardware_state), ConfigItem::HardwareState));
 
         *out = (hardware_state == HardwareState_Development);
         return ResultSuccess();
@@ -646,7 +646,7 @@ namespace ams::spl::impl {
 
         R_TRY(LoadVirtualAesKey(keyslot_holder.GetKeySlot(), access_key, s_generate_aes_key_source));
 
-        return smc::ConvertResult(DecryptAesBlock(keyslot_holder.GetKeySlot(), out_key, &key_source));
+        return smc::ConvertResult(DecryptAesBlock(keyslot_holder.GetKeySlot(), out_key, std::addressof(key_source)));
     }
 
     Result DecryptAesKey(AesKey *out_key, const KeySource &key_source, u32 generation, u32 option) {
@@ -655,7 +655,7 @@ namespace ams::spl::impl {
         };
 
         AccessKey access_key;
-        R_TRY(GenerateAesKek(&access_key, s_decrypt_aes_key_source, generation, option));
+        R_TRY(GenerateAesKek(std::addressof(access_key), s_decrypt_aes_key_source, generation, option));
 
         return GenerateAesKey(out_key, access_key, key_source);
     }
@@ -711,7 +711,7 @@ namespace ams::spl::impl {
             const u32 dst_ll_addr = g_se_mapped_work_buffer_addr + offsetof(SeCryptContext, out);
             const u32 src_ll_addr = g_se_mapped_work_buffer_addr + offsetof(SeCryptContext, in);
 
-            smc::Result res = smc::ComputeAes(&op_key, mode, iv_ctr, dst_ll_addr, src_ll_addr, src_size);
+            smc::Result res = smc::ComputeAes(std::addressof(op_key), mode, iv_ctr, dst_ll_addr, src_ll_addr, src_size);
             if (res != smc::Result::Success) {
                 return smc::ConvertResult(res);
             }
@@ -791,7 +791,7 @@ namespace ams::spl::impl {
             copy_size = std::min(dst_size, src_size - DeviceUniqueDataMetaSize);
             smc_res = smc::DecryptDeviceUniqueData(layout->data, src_size, access_key, key_source, static_cast<smc::DeviceUniqueDataMode>(option));
         } else {
-            smc_res = smc::DecryptDeviceUniqueData(&copy_size, layout->data, src_size, access_key, key_source, option);
+            smc_res = smc::DecryptDeviceUniqueData(std::addressof(copy_size), layout->data, src_size, access_key, key_source, option);
             copy_size = std::min(dst_size, copy_size);
         }
 
diff --git a/stratosphere/spl/source/spl_ctr_drbg.cpp b/stratosphere/spl/source/spl_ctr_drbg.cpp
index 0fb2ecaff..845c79c59 100644
--- a/stratosphere/spl/source/spl_ctr_drbg.cpp
+++ b/stratosphere/spl/source/spl_ctr_drbg.cpp
@@ -19,16 +19,16 @@
 namespace ams::spl {
 
     void CtrDrbg::Update(const void *data) {
-        aes128ContextCreate(&this->aes_ctx, this->key, true);
+        aes128ContextCreate(std::addressof(this->aes_ctx), this->key, true);
         for (size_t offset = 0; offset < sizeof(this->work[1]); offset += BlockSize) {
             IncrementCounter(this->counter);
-            aes128EncryptBlock(&this->aes_ctx, &this->work[1][offset], this->counter);
+            aes128EncryptBlock(std::addressof(this->aes_ctx), std::addressof(this->work[1][offset]), this->counter);
         }
 
         Xor(this->work[1], data, sizeof(this->work[1]));
 
-        std::memcpy(this->key, &this->work[1][0], sizeof(this->key));
-        std::memcpy(this->counter, &this->work[1][BlockSize], sizeof(this->key));
+        std::memcpy(this->key, std::addressof(this->work[1][0]), sizeof(this->key));
+        std::memcpy(this->counter, std::addressof(this->work[1][BlockSize]), sizeof(this->key));
     }
 
     void CtrDrbg::Initialize(const void *seed) {
@@ -54,19 +54,19 @@ namespace ams::spl {
             return false;
         }
 
-        aes128ContextCreate(&this->aes_ctx, this->key, true);
+        aes128ContextCreate(std::addressof(this->aes_ctx), this->key, true);
         u8 *cur_dst = reinterpret_cast<u8 *>(out);
 
         size_t aligned_size = (size & ~(BlockSize - 1));
         for (size_t offset = 0; offset < aligned_size; offset += BlockSize) {
             IncrementCounter(this->counter);
-            aes128EncryptBlock(&this->aes_ctx, cur_dst, this->counter);
+            aes128EncryptBlock(std::addressof(this->aes_ctx), cur_dst, this->counter);
             cur_dst += BlockSize;
         }
 
         if (size > aligned_size) {
             IncrementCounter(this->counter);
-            aes128EncryptBlock(&this->aes_ctx, this->work[1], this->counter);
+            aes128EncryptBlock(std::addressof(this->aes_ctx), this->work[1], this->counter);
             std::memcpy(cur_dst, this->work[1], size - aligned_size);
         }