当使用硬编码值时,即使未实例化其中的函数,也会触发它。这种行为是正确的还是我误解了静态断言是如何工作的?
#include <type_traits>
template <class T>
struct Helper
{
static void do_something()
{
// Always fails, even when not instantiated.
static_assert(false,
"You must specialize this class to serialize Enums.");
// Work around:
static_assert(!std::is_same<T, T>::value,
"You must specialize this class to serialize Enums.");
}
};
使用:g ++(Ubuntu / Linaro 4.6.1-9ubuntu3)4.6.1
答案 0 :(得分:0)
SFINAE适用于函数参数和返回类型,而不适用于模板参数。
答案 1 :(得分:0)
那是因为&#34;假&#34;不以任何方式依赖于模板,对于编译器,此代码肯定会断言。有类似的线程
static_assert fails compilation even though template function is called nowhere