如果 std::is_trivial_v<T> 为真,std::is_standard_layout_v<T> 是否总是为真?
Is std::is_standard_layout_v<T> always true if std::is_trivial_v<T> is true?
template<typename T>
void f()
{
if constexpr (std::is_trivial_v<T>)
{
// Does the following line never fail?
static_assert(std::is_standard_layout_v<T>);
}
}
如果 std::is_trivial_v<T>
为真,std::is_standard_layout_v<T>
是否总是为真?
如果没有,有没有反例?
#include <type_traits>
class type
{
public: int x;
private: int y;
};
static_assert(std::is_trivial_v< type >);
// not standard layout because different access level of x and y
static_assert(not std::is_standard_layout_v< type >);
template<typename T>
void f()
{
if constexpr (std::is_trivial_v<T>)
{
// Does the following line never fail?
static_assert(std::is_standard_layout_v<T>);
}
}
如果
std::is_trivial_v<T>
为真,std::is_standard_layout_v<T>
是否总是为真?如果没有,有没有反例?
#include <type_traits>
class type
{
public: int x;
private: int y;
};
static_assert(std::is_trivial_v< type >);
// not standard layout because different access level of x and y
static_assert(not std::is_standard_layout_v< type >);