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