bool函数模板特化中的返回值

时间:2017-09-22 22:51:55

标签: c++ templates

我想知道为什么下面的函数模板特化不能编译 (由于no return statement in function returning non-void)。

class Boring {
public:
    template<typename T> bool eval() const { }
};

template<> inline bool Boring::eval<int>() const { return true; }

我希望除非使用,否则不会评估非专业化的功能模板。如果返回类型更改为T*,则以下编译成功。

int x = 5;

class Boring {
public:
    template<typename T> T* eval() const { }
};

template<> inline int* Boring::eval<int>() const { return &x; }

1 个答案:

答案 0 :(得分:0)

这两个项目都是格式良好的。虽然在实例化和调用主eval模板时会发生未定义的行为,但这不会导致程序格式错误。但是,您的编译器在某种模式下会将某些警告视为错误(可能是-Wall),或者默认情况下将此特定警告视为错误。