为什么不;t具有模板参数的C++函数warn";控制到达非无效函数""的末尾;在clang



我注意到,如果我编译这个

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>();,您将看到所需的警告。

最新更新