std::is_enum 定义于头文件<type_traits> template<classT> structis_enum; (C++11 起) 检查T是否为枚举类型。若T为枚举类型,则提供等于true的成员常量value。否则,value等于false。 添加is_enum或is_enum_v(C++17 起)的特化的程序行为未定义。 模板形参 T-要检查的类型 辅助变量
,例如std::is_enum<decltype(C::c1)>::valueC::c1C如果没有名为 的成员,将导致替换失败c1。 解决这个问题的唯一方法是在替换失败不会导致程序格式错误的情况下执行此操作。 因此,您可以使用 SFINAE 或(如果 C++20 可用)需要表达式。所以对于 C++20 这可以工作:...
is_enum: GFG1:false GFG2:true 程序2:: // C++ program to illustrate//is_enumtemplate#include<iostream>#include<type_traits>usingnamespacestd;classGFG1{};enumclassGFG2:int{};// Driver codeintmain(){cout<< boolalpha;cout<<"is_enum:"<<endl;cout<<"GFG1:"<<is_enum<GFG1>::value <<'\...
{ std::cout << std::boolalpha << std::is_enum<A>::value << '\n' << std::is_enum<E>::value << '\n' << std::is_enum<A::E>() << '\n' << std::is_enum_v<int> << '\n' // Uses helper variable template (C++17) << std::is_enum_v<Ec> << '\n'; // ...
struct is_enum; (C++11 起) 检查T 是否为枚举类型。若 T 为枚举类型,则提供等于 true 的成员常量 value 。否则, value 等于false 。 添加is_enum 或is_enum_v (C++17 起) 的特化的程序行为未定义。 模板形参 T - 要检查的类型 辅助变量模板 template< class T >inline constexpr bool is_enum_v =...
(std::is_enum_v<std::byte>) { std::cout << "byte counts as enum" << std::endl; } if constexpr(std::is_enum_v<int>) { std::cout << "int counts as enum" << std::endl; } if constexpr(std::is_enum_v<Foo>) { std::cout << "scoped enum counts as enum" << std:...
#include <type_traits>structA{enumE{};};static_assert(std::is_enum_v<A>==false);static_assert(std::is_enum_v<A::E>==true);enumE{};static_assert(std::is_enum_v<E>==true);enumclassEc:int{};static_assert(std::is_enum_v<Ec>==true);static_assert(std::is_enum_v<int>==fa...
std::is_copy_assignable std::is_copy_constructible std::is_default_constructible std::is_destructible std::is_empty std::is_enum std::is_error_code_enum std::is_error_code_enum<std::future_errc> std::is_error_condition_enum std::is_error_condition_enum<std::errc> std::is_final std...
std::is_constructible:判断类型 T 是否可以用 Args... 来构造,这就像我们看一件家具是否可以通过提供的零件来组装。 除了以上这些,C++标准库还提供了更多其他的类型特性,如 std::is_array、std::is_enum、std::is_function 等等。使用这些类型特性,我们可以获取更多关于类型的信息,帮助我们在编译时进行决策,实现...
问std::is_member_function_pointer总是返回trueENvoid(T::*)()是一个member_function_pointer (即使...