回答完这个问题后,我试图is_complete
在 Boost 库中查找模板,但我意识到 Boost.TypeTraits 中没有这样的模板。为什么Boost库中没有这样的模板?它应该是什么样子?
//! Check whether type complete
template<typename T>
struct is_complete
{
static const bool value = ( sizeof(T) > 0 );
};
...
// so I could use it in such a way
BOOST_STATIC_ASSERT( boost::is_complete<T>::value );
上面的代码是不正确的,因为应用于sizeof
不完整类型是非法的。什么是好的解决方案?在这种情况下是否可以以某种方式应用 SFINAE?
好吧,如果不违反ODR 规则,一般无法解决这个问题,但是有一个特定于平台的解决方案对我有用。