std::auto_ptr::release std::auto_ptr::reset std::bad_alloc std::bad_any_cast std::bad_array_new_length std::bad_array_new_length::bad_array_new_length std::bad_cast std::bad_cast::bad_cast std::bad_exception std::bad_exception::bad_exception std::bad_exception::what std::bad...
std::is_bounded_array std::is_unbounded_array std::size_t std::nullptr_t std::is_integral std::rank std::is_void std::is_null_pointer std::is_array std::is_pointer std::is_enum std::is_union std::is_class std::is_function std::is_object std::is_scalar std::is_compound std...
std::is_pod 是一元类型特征 (UnaryTypeTrait) 。 如果T 是简旧数据(POD)类型,那么提供的成员常量 value 等于true。对于其它任何类型,value 等于false。 如果std::remove_all_extents_t<T> 是除了(可有 cv 限定的)void 以外的不完整类型,那么行为未定义。
看到这块,你是不是基本上了解了什么是POD类型以及怎样判断某个类型是不是POD?可惜的是,你懂了也没用,因为自C++20标准弃用了POD以及std::is_pod 和std::is_pod_v 的概念,这是因为一方面,POD等同于平凡的标准布局,另一方面,在大多数情况下,平凡类型和标准布局这两个就满足了,以下摘自于C++标准委员会对POD弃用...
cout << "A: " << std::is_pod<A>::value << std::endl; std::cout << "B: " << std::is_pod<B>::value << std::endl; std::cout << "C: " << std::is_pod<C>::value << std::endl; std::cout << "D: " << std::is_pod<D>::value << std::endl; return 0; ...
// is_pointer example#include <iostream>#include <type_traits>intmain() { std::cout << std::boolalpha; std::cout <<"is_pointer:"<< std::endl; std::cout <<"int: "<< std::is_pointer<int>::value << std::endl; std::cout <<"int*: "<< std::is_pointer<int*>::value <<...
若T 是简旧数据类型 (PODType) ,即既是平凡又是标准布局,则提供等于 true 的成员常量 value 。对于任何其他类型, value 为false。 若std::remove_all_extents_t<T> 是不完整类型且非(可为 cv 限定的) void 则行为未定义。 添加is_pod 或is_pod_v (C++17 起) 的特化的程序行为未定义。
std::is_pod 当一个数据类型满足了”平凡的定义“和”标准布局“,我们则认为它是一个POD数据,非静态成员都是”平凡的“ 1.平凡的 2.平凡的 3.非静态成员“平凡的”
std::enable_if_t<std::is_pod<Z>{},bool>=true>voidx(){std::cout<<"yep"<<std::endl;}...
cout<<"is_pod<trivial> == "<<std::boolalpha <<std::is_pod<trivial>::value <<std::endl;std::cout<<"is_pod<int> == "<<std::boolalpha <<std::is_pod<int>::value <<std::endl;std::cout<<"is_pod<throws> == "<<std::boolalpha <<std::is_pod<throws>::value <<std::endl...