6868
6969 </ head >
7070 < body >
71- < header data-kunai-mdinfo ="{"meta": {"cpp": ["cpp17"]}, "sources": [{"id": "e71dc51e3c807c2d099833ca105af0209dae3458", "source": "#include <type_traits>\n\ntemplate <typename T>\nvoid f(T)\n{\n if constexpr (std::is_same_v<T, int>)\n {\n // T\u304cint\u306e\u3068\u304d\u306e\u307f\u8a55\u4fa1\u3055\u308c\u3066\u307b\u3057\u3044\n // \u5b9f\u969b\u306f\u5e38\u306b\u8a55\u4fa1\u3055\u308c\u308b\n static_assert(false);\n }\n}\n\nint main()\n{\n f(2.4);\n f(3);\n}\n"}, {"id": "583ebd19262fed28c91d69f132fcbcae803ddce6", "source": "#include <type_traits>\n\ntemplate <typename T>\nconstexpr bool false_v = false;\n\ntemplate <typename T>\nvoid f(T)\n{\n if constexpr (std::is_same_v<T, int>)\n {\n // T\u304cint\u306e\u3068\u304d\u306e\u307f\u8a55\u4fa1\u3055\u308c\u308b\n static_assert(false_v<T>);\n }\n}\n\nint main()\n{\n f(2.4);\n f(3);\n}\n"}, {"id": "bbd30e2c982d81f86d8e0b8fc3b99ee38278503f", "source": "#include <type_traits>\n\ntemplate <typename T>\nvoid f(T)\n{\n if constexpr (std::is_same_v<T, int>)\n {\n // T\u304cint\u306e\u3068\u304d\u306e\u307f\u8a55\u4fa1\u3055\u308c\u308b\n static_assert([]{return false;}());\n }\n}\n\nint main()\n{\n f(2.4);\n f(3);\n}\n"}, {"id": "3c217d78906ba664474fe1211739a73dc4b7283a", "source": "#include <type_traits>\n#include <iostream>\n\nstruct Hoge {\n using type = int;\n};\n\ntemplate <typename T>\nvoid f()\n{\n if constexpr (std::is_same_v<T::type, int> || std::is_same_v<T::value_type, int>) {\n std::cout << \"is int\" << std::endl;\n }\n}\n\nint main()\n{\n f<Hoge>(); //error: Hoge::value_type\u306f\u5b58\u5728\u3057\u306a\u3044\u306e\u3067if constexpr\u6587\u306e\u6761\u4ef6\u5f0f\u304c\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u306b\u306a\u308b\n}\n"}, {"id": "1db62823aed0162ca08415e26147d292cbce36d2", "source": "#include <cstdint>\ntemplate <class T>\nvoid f(T t) {\n if constexpr (sizeof(T) == sizeof(std::int32_t)) {\n use(t);\n } else {\n static_assert(false, \"must be 32bit\");\n }\n}\n\nvoid g(std::int8_t c) {\n std::int32_t n = 0;\n f(n); // OK: n\u306fstd::int32_t\u578b\u306a\u306e\u3067`use(t);`\u306e\u307b\u3046\u304c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3055\u308c\u308b\u305f\u3081\u306b\u3001static_assert\u6587\u306f\u5ba3\u8a00\u3055\u308c\u306a\u3044\u3002\n f(c); // error: c\u306fstd::int8_t\u578b\u306a\u306e\u3067\u3001static_assert\u6587\u306f\u5ba3\u8a00\u3055\u308c\u3001\"must be 32bit\"\u3068\u30b3\u30f3\u30d1\u30a4\u30e9\u304c\u8a3a\u65ad\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u51fa\u529b\u3059\u308b\n}\n"}, {"id": "474b034dc49c625edd965c985714c99002564ffc", "source": "#include <type_traits>\n#include <random>\n#include <cstdint>\n#include <iostream>\n\n// C++11\ntemplate<typename Integer>\nusing mt = typename std::conditional<std::is_same<Integer, std::uint32_t>::value, std::mt19937, std::mt19937_64>::type;\n\n// C++14\u4ee5\u964d\n// template<typename Integer>\n// using mt = std::conditional_t<std::is_same<Integer, std::uint32_t>::value, std::mt19937, std::mt19937_64>;\n\nint main()\n{\n mt<std::uint32_t> m1 {37};\n std::cout << m1() << std::endl;\n}\n"}], "page_id": ["lang", "cpp17", "if_constexpr"]} ">
71+ < header data-kunai-mdinfo ="{"meta": {"cpp": ["cpp17"]}, "sources": [{"id": "e71dc51e3c807c2d099833ca105af0209dae3458", "source": "#include <type_traits>\n\ntemplate <typename T>\nvoid f(T)\n{\n if constexpr (std::is_same_v<T, int>)\n {\n // T\u304cint\u306e\u3068\u304d\u306e\u307f\u8a55\u4fa1\u3055\u308c\u3066\u307b\u3057\u3044\n // \u5b9f\u969b\u306f\u5e38\u306b\u8a55\u4fa1\u3055\u308c\u308b\n static_assert(false);\n }\n}\n\nint main()\n{\n f(2.4);\n f(3);\n}\n"}, {"id": "583ebd19262fed28c91d69f132fcbcae803ddce6", "source": "#include <type_traits>\n\ntemplate <typename T>\nconstexpr bool false_v = false;\n\ntemplate <typename T>\nvoid f(T)\n{\n if constexpr (std::is_same_v<T, int>)\n {\n // T\u304cint\u306e\u3068\u304d\u306e\u307f\u8a55\u4fa1\u3055\u308c\u308b\n static_assert(false_v<T>);\n }\n}\n\nint main()\n{\n f(2.4);\n f(3);\n}\n"}, {"id": "bbd30e2c982d81f86d8e0b8fc3b99ee38278503f", "source": "#include <type_traits>\n\ntemplate <typename T>\nvoid f(T)\n{\n if constexpr (std::is_same_v<T, int>)\n {\n // T\u304cint\u306e\u3068\u304d\u306e\u307f\u8a55\u4fa1\u3055\u308c\u308b\n static_assert([]{return false;}());\n }\n}\n\nint main()\n{\n f(2.4);\n f(3);\n}\n"}, {"id": "babd8abb29ae2e8d87d8740451c8ba13f4573333", "source": "#include <type_traits>\n#include <iostream>\n\nstruct Hoge {\n using type = int;\n};\n\ntemplate <typename T>\nvoid f()\n{\n if constexpr (std::is_same_v<typename T::type, int> || std::is_same_v<typename T::value_type, int>) {\n std::cout << \"is int\" << std::endl;\n }\n}\n\nint main()\n{\n f<Hoge>(); //error: Hoge::value_type\u306f\u5b58\u5728\u3057\u306a\u3044\u306e\u3067if constexpr\u6587\u306e\u6761\u4ef6\u5f0f\u304c\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u306b\u306a\u308b\n}\n"}, {"id": "1db62823aed0162ca08415e26147d292cbce36d2", "source": "#include <cstdint>\ntemplate <class T>\nvoid f(T t) {\n if constexpr (sizeof(T) == sizeof(std::int32_t)) {\n use(t);\n } else {\n static_assert(false, \"must be 32bit\");\n }\n}\n\nvoid g(std::int8_t c) {\n std::int32_t n = 0;\n f(n); // OK: n\u306fstd::int32_t\u578b\u306a\u306e\u3067`use(t);`\u306e\u307b\u3046\u304c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3055\u308c\u308b\u305f\u3081\u306b\u3001static_assert\u6587\u306f\u5ba3\u8a00\u3055\u308c\u306a\u3044\u3002\n f(c); // error: c\u306fstd::int8_t\u578b\u306a\u306e\u3067\u3001static_assert\u6587\u306f\u5ba3\u8a00\u3055\u308c\u3001\"must be 32bit\"\u3068\u30b3\u30f3\u30d1\u30a4\u30e9\u304c\u8a3a\u65ad\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u51fa\u529b\u3059\u308b\n}\n"}, {"id": "474b034dc49c625edd965c985714c99002564ffc", "source": "#include <type_traits>\n#include <random>\n#include <cstdint>\n#include <iostream>\n\n// C++11\ntemplate<typename Integer>\nusing mt = typename std::conditional<std::is_same<Integer, std::uint32_t>::value, std::mt19937, std::mt19937_64>::type;\n\n// C++14\u4ee5\u964d\n// template<typename Integer>\n// using mt = std::conditional_t<std::is_same<Integer, std::uint32_t>::value, std::mt19937, std::mt19937_64>;\n\nint main()\n{\n mt<std::uint32_t> m1 {37};\n std::cout << m1() << std::endl;\n}\n"}], "page_id": ["lang", "cpp17", "if_constexpr"]} ">
7272 < nav class ="navbar navbar-default " role ="navigation ">
7373 < div class ="container-fluid ">
7474 < div class ="navbar-header ">
188188
189189 < p class ="text-right "> < small >
190190 最終更新日時(UTC):
191- < span itemprop ="datePublished " content ="2025-07-08T15:33:39 ">
192- 2025年07月08日 15時33分39秒
191+ < span itemprop ="datePublished " content ="2025-09-18T07:22:34 ">
192+ 2025年09月18日 07時22分34秒
193193 </ span >
194194 < br />
195195 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
196- < span itemprop ="name "> Akira Takahashi </ span >
196+ < span itemprop ="name "> Raclamusi </ span >
197197 </ span >
198198 が更新
199199 </ small > </ p >
@@ -342,7 +342,7 @@ <h3>2段階名前探索における注意点</h3>
342342</ code > </ pre > </ div >
343343</ div > </ p >
344344< p > < code > constexpr if</ code > 文の条件式内は実体化が起きる。したがって実体化するとコンパイルエラーになるものは書いてはいけない。</ p >
345- < p > < div class ="yata " id ="3c217d78906ba664474fe1211739a73dc4b7283a "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../reference/type_traits.html "> <type_traits></ a > </ span > < span class ="cp "> </ span >
345+ < p > < div class ="yata " id ="babd8abb29ae2e8d87d8740451c8ba13f4573333 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../reference/type_traits.html "> <type_traits></ a > </ span > < span class ="cp "> </ span >
346346< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../reference/iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
347347
348348< span class ="k "> struct</ span > < span class ="n "> Hoge</ span > < span class ="p "> {</ span >
@@ -352,7 +352,7 @@ <h3>2段階名前探索における注意点</h3>
352352< span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> typename</ span > < span class ="n "> T</ span > < span class ="o "> ></ span >
353353< span class ="kt "> void</ span > < span class ="n "> f</ span > < span class ="p "> ()</ span >
354354< span class ="p "> {</ span >
355- < span class ="k "> if</ span > < span class ="k "> constexpr</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../reference/type_traits/is_same.html "> std::is_same_v</ a > </ span > < span class ="o "> <</ span > < span class ="n "> T</ span > < span class ="o "> ::</ span > < span class ="n "> type</ span > < span class ="p "> ,</ span > < span class ="kt "> int</ span > < span class ="o "> ></ span > < span class ="o "> ||</ span > < span class ="n "> < a href ="../../reference/type_traits/is_same.html "> std::is_same_v</ a > </ span > < span class ="o "> <</ span > < span class ="n "> T</ span > < span class ="o "> ::</ span > < span class ="n "> value_type</ span > < span class ="p "> ,</ span > < span class ="kt "> int</ span > < span class ="o "> ></ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
355+ < span class ="k "> if</ span > < span class ="k "> constexpr</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../reference/type_traits/is_same.html "> std::is_same_v</ a > </ span > < span class ="o "> <</ span > < span class ="k " > typename </ span > < span class =" n "> T</ span > < span class ="o "> ::</ span > < span class ="n "> type</ span > < span class ="p "> ,</ span > < span class ="kt "> int</ span > < span class ="o "> ></ span > < span class ="o "> ||</ span > < span class ="n "> < a href ="../../reference/type_traits/is_same.html "> std::is_same_v</ a > </ span > < span class ="o "> <</ span > < span class =" k " > typename </ span > < span class ="n "> T</ span > < span class ="o "> ::</ span > < span class ="n "> value_type</ span > < span class ="p "> ,</ span > < span class ="kt "> int</ span > < span class ="o "> ></ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
356356 < span class ="n "> < a href ="../../reference/iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="s "> "is int"</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../../reference/ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
357357 < span class ="p "> }</ span >
358358< span class ="p "> }</ span >
0 commit comments