static_assert即使成员未实例化

时间:2014-05-09 07:48:22

标签: c++ templates static-assert

当使用硬编码值时,即使未实例化其中的函数,也会触发它。这种行为是正确的还是我误解了静态断言是如何工作的?

#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

2 个答案:

答案 0 :(得分:0)

SFINAE适用于函数参数和返回类型,而不适用于模板参数。

答案 1 :(得分:0)

那是因为&#34;假&#34;不以任何方式依赖于模板,对于编译器,此代码肯定会断言。有类似的线程

static_assert fails compilation even though template function is called nowhere