为什么带有模板参数的 C++ 函数在 clang++ 7 上不警告 "control reaches the end of a non-void function"?
why doesn't a C++ function with template arguments warn "control reaches the end of a non-void function" on clang++ 7?
我注意到如果我编译这个
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
这是编译器中的错误吗?
除非您调用(或以其他方式使用)该函数模板特化并对其进行实例化,否则实际生成的 函数 不存在,并且您不会得到任何关于除非它在语法上无效。
我们看不到您程序的其余部分,因为您认为可重现的示例不重要,但大概您没有在程序中这样做。
在您的主函数中写入 x<int>();
,您将看到您想要的警告。
我注意到如果我编译这个
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
这是编译器中的错误吗?
除非您调用(或以其他方式使用)该函数模板特化并对其进行实例化,否则实际生成的 函数 不存在,并且您不会得到任何关于除非它在语法上无效。
我们看不到您程序的其余部分,因为您认为可重现的示例不重要,但大概您没有在程序中这样做。
在您的主函数中写入 x<int>();
,您将看到您想要的警告。