相关疑难解决方法(0)

尽管有SFINAE,这个节目是否格局不正确?

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是为了避免在不相关的模板声明可见时创建不良程序 [...]

(强调我的)

c++ sfinae language-lawyer

2
推荐指数
1
解决办法
209
查看次数

标签 统计

c++ ×1

language-lawyer ×1

sfinae ×1