我想知道为什么下面的函数模板特化不能编译
(由于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; }
答案 0 :(得分:0)
这两个项目都是格式良好的。虽然在实例化和调用主eval
模板时会发生未定义的行为,但这不会导致程序格式错误。但是,您的编译器在某种模式下会将某些警告视为错误(可能是-Wall
),或者默认情况下将此特定警告视为错误。