template <typename T> void f() {
return 0; // returning value from function returning `void`
}
int main()
{
// Not instantiating or calling any f<T>()
}
Run Code Online (Sandbox Code Playgroud)
在对这个答案的评论中,David断言包含语义错误但未实例化的函数模板会导致程序格式错误:
无论模板使用或不使用不要紧,程序形成不良甚至没有任何实例,但不是必需的编译器诊断它.
相反,我很确定SFINAE,以及防止类型推导和因此实例化函数模板[C++11: 14.8.2/8],使程序保持良好的形式.但是我在这个标准段落中找不到明确说明的任何文字.
谁是对的?
维基百科,我不认为这个问题具有权威性,说的是一个略有不同的案例:
[..]引入SFINAE是为了避免在不相关的模板声明可见时创建不良程序 [...]
(强调我的)