【发布时间】:2017-04-01 05:00:14
【问题描述】:
考虑以下程序:
struct S {
using T = float;
operator T() { return 9.9f; }
};
int main() {
S m;
S::T t = m;
t = m.operator T(); // Is this correct ?
}
程序在 g++ 中编译良好(见现场演示here)
但在 clang++、MSVC++ 和 Intel C++ 编译器中编译失败
clang++ 给出以下错误(见现场演示here)
main.cpp:8:20: error: unknown type name 'T'; did you mean 'S::T'?
t = m.operator T(); // Is this correct ?
^
S::T
main.cpp:2:11: note: 'S::T' declared here
using T = float;
MSVC++ 出现以下错误(见现场演示here)
source_file.cpp(8): error C2833: 'operator T' is not a recognized operator or type
source_file.cpp(8): error C2059: syntax error: 'newline'
英特尔 C++ 编译器也拒绝此代码(参见现场演示 here)
那么,问题是哪个编译器就在这里? g++ 在这里不正确还是其他 3 个编译器在这里不正确? C++ 标准对此有何规定?
【问题讨论】:
-
哇,非常好的问题!
标签: c++ visual-c++ g++ language-lawyer clang++