【发布时间】:2020-11-07 22:47:53
【问题描述】:
以下示例使用 gcc 编译,但不使用 clang。哪个编译器是正确的,为什么?
#include <utility>
struct Foo {
private:
template<typename T>
static int f();
public:
template<typename U>
using T = decltype(f<U>());
};
int main () {
static_assert(std::is_same_v<Foo::T<float>, int>);
}
Clang 抱怨 'f' is a private member of 'Foo'。我认为这是不正确的,因为f 是从Foo 内部访问的,因此应该是可见的。有趣的是,如果T 不是模板,它就可以工作。
直播代码here.
【问题讨论】:
标签: c++ templates language-lawyer