static_assert( std::is_same_v< std::tuple_element<0, decltype(tuple)>::type, Kind::EnumType > ); static_assert( std::is_same_v< std::tuple_element<1, decltype(tuple)>::type, Kind::EnumType > ); // WHAT ??? static_assert( std::is_same_v< ValueListAsTuple_t< Kind::MetaV...
template <typename T> auto someFunc(T t) { if constexpr(std::is_same_v<T, X>) { return t.some_func_only_for_x(); } else { std::cout << t << std::endl; return; } } void callerFunc() { X x; auto res = someFunc(x); someFunc(25); } 在上边的例子中,函数some...
template<typename T>struct Tbox { using type = T; }; template<typename T> constexpr auto $ = Tbox<T>{}; template<typename... Ts> struct S { template<typename T,typename Type,typename... Types> static constexpr bool __has() { if constexpr(std::is_same_v<T,Type>) { return(tru...
template<typename T> T f() { if constexpr (std::is_same<T, int>::value) { T t = 10; }else { T t; } return t; } Run Code Online (Sandbox Code Playgroud) 我对上述代码的理解f是 int t = 10; return t; Run Code Online (Sandbox Code Playgroud) 或者 T t = // some ...
template<typename T>auto func(T val) {ifconstexpr (std::is_same_v<T,char*>) { std::cout<< *val <<endl; }else{ std::cout<< val <<endl; } }intmain() {char*p =newchar('a');intk =1; func(k); func(p);return0;
constexpr if 的主要用途是简化模板代码(这也意味着除非你是库作者或者模板狂魔,很少会用到)。很多...
template <typename T>T max(T a, T b) {if constexpr (std::is_same_v<T, std::string>) {return a.length() > b.length() ? a : b;} else {return a > b ? a : b;}} 在这个例子中,if constexpr使我们能够根据模板参数T的类型在编译时期选择不同的代码路径。如果T是std::string,我们...
Code: #include <type_traits> template <typename T> int f() { if constexpr (std::is_same_v<T, int>) return 0; else static_assert(false, "shouldn't be compiled"); } int main() { } Compiler output: error C2338: static_assert failed: ‘shouldn’t be co...
如果传入实参类型为std::string,则肯定满足上述条件,但假如传入实参不为std::string,虽然它不满足std::is_same<T, std::string>::value,但由于if constexpr不支持短路规则,所以T::npos == -1依然会被编译。由于T::nops是个非法的表达式所以会编译失败。上述例子正确写法应该是: ...
#include <type_traits> template<typename T> void templateFunction(T arg) { if (std::is_same<T, wchar_t[]>::value) { foo(arg); } else if (std::is_same<T, constexpr>::value) { bar(arg); } else { // 其他类型的参数处理 } } 上述代码中,我们使用std::is_same来判断参数...