首页 > 解决方案 > 未评估上下文中的函数模板实例化

问题描述

以下程序是否格式良好?

template<typename T>
void f() { T{}.m; }

using u = decltype(f<int>);

这是要试验的代码。

实例化f<int>是错误的,但f<int>这里没有在评估的上下文中使用,所以我认为应该没问题。clang 同意,但是 gcc 抱怨:

In instantiation of 'void f() [with T = int]':
error: request for member 'm' in '0', which is of non-class type 'int'

我不明白为什么 gcc 在这里实例化任何东西。

那么这段代码格式不正确,还是 gcc 错误?

标签: c++language-lawyer

解决方案


推荐阅读