我注意到,如果我编译这个
int x() { }
像往常一样,我收到了警告:
$ clang++-7 -pthread -std=c++17 -o main main.cpp
main.cpp:5:11: warning: control reaches end of non-void
function [-Wreturn-type]
int x() { }
^
1 warning generated.
$ ./main
但是,如果函数采用任何模板参数:
template <typename y>
int x() { }
没有出现任何警告。
$ clang++-7 -pthread -std=c++17 -o main main.cpp
$ ./main
这是编译器中的错误吗?
除非您调用(或以其他方式odr使用(该函数模板专门化并实例化它,否则实际生成的函数不存在,除非它在语法上无效,否则您不会得到任何有关它的诊断。
我们看不到你的程序的其余部分,因为你认为一个可复制的例子不重要,但可能你在程序中没有这样做。
在主函数中写入x<int>();
,您将看到所需的警告。