出去玩了一趟,好久沒寫一些東西,不然都要乾涸了
這觀念也很簡單,假設我們有類似這樣的程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| template <typename T> void foo() { if constexpr (std::is_same_v<T, int>) { } else if constexpr (std::is_same_v<T, float>) { } else { static_assert(false, "T not supported"); } }
|
這段程式在C++20是編譯不過,可是C++23放鬆了限制,允許這種寫法
不過根據神人的解法,在C++20可以模擬這種動作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| template <class... T> constexpr bool always_false = false;
template <typename T> void foo() { if constexpr (std::is_same_v<T, int>) { } else if constexpr (std::is_same_v<T, float>) { } else { static_assert(always_false<T>, "T not supported"); } }
|
雖然繞了一點,但是能用
Reference