summaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorMorph <39850852+Morph1984@users.noreply.github.com>2022-10-21 08:34:06 +0200
committerMorph <39850852+Morph1984@users.noreply.github.com>2022-10-22 21:02:04 +0200
commite6ab1f673b88b1af6bd966886249c7824ec5dbd4 (patch)
tree045b57ae71c4b8efe34be8504d86638f13cf61ac /src/common
parentCMakeLists: Remove all redundant warnings (diff)
downloadyuzu-e6ab1f673b88b1af6bd966886249c7824ec5dbd4.tar
yuzu-e6ab1f673b88b1af6bd966886249c7824ec5dbd4.tar.gz
yuzu-e6ab1f673b88b1af6bd966886249c7824ec5dbd4.tar.bz2
yuzu-e6ab1f673b88b1af6bd966886249c7824ec5dbd4.tar.lz
yuzu-e6ab1f673b88b1af6bd966886249c7824ec5dbd4.tar.xz
yuzu-e6ab1f673b88b1af6bd966886249c7824ec5dbd4.tar.zst
yuzu-e6ab1f673b88b1af6bd966886249c7824ec5dbd4.zip
Diffstat (limited to 'src/common')
-rw-r--r--src/common/CMakeLists.txt6
-rw-r--r--src/common/bit_field.h15
2 files changed, 17 insertions, 4 deletions
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index 6da547a3f..043f27fb1 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -157,6 +157,12 @@ if (MSVC)
target_compile_options(common PRIVATE
/W4
/WX
+
+ /we4242 # 'identifier': conversion from 'type1' to 'type2', possible loss of data
+ /we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data
+ /we4245 # 'conversion': conversion from 'type1' to 'type2', signed/unsigned mismatch
+ /we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data
+ /we4800 # Implicit conversion from 'type' to bool. Possible information loss
)
else()
target_compile_options(common PRIVATE
diff --git a/src/common/bit_field.h b/src/common/bit_field.h
index 7e1df62b1..e4e58ea45 100644
--- a/src/common/bit_field.h
+++ b/src/common/bit_field.h
@@ -141,10 +141,6 @@ public:
constexpr BitField(BitField&&) noexcept = default;
constexpr BitField& operator=(BitField&&) noexcept = default;
- [[nodiscard]] constexpr operator T() const {
- return Value();
- }
-
constexpr void Assign(const T& value) {
#ifdef _MSC_VER
storage = static_cast<StorageType>((storage & ~mask) | FormatValue(value));
@@ -162,6 +158,17 @@ public:
return ExtractValue(storage);
}
+ template <typename ConvertedToType>
+ [[nodiscard]] constexpr ConvertedToType As() const {
+ static_assert(!std::is_same_v<T, ConvertedToType>,
+ "Unnecessary cast. Use Value() instead.");
+ return static_cast<ConvertedToType>(Value());
+ }
+
+ [[nodiscard]] constexpr operator T() const {
+ return Value();
+ }
+
[[nodiscard]] constexpr explicit operator bool() const {
return Value() != 0;
}