小编bre*_*anw的帖子

Clang vs MSVC:模板函数原型的处理

以下是一段测试代码,我将分别编译它的结果与MSVC和Clang进行比较.每个编译器的输出如下所示.MSVC假装未使用的模板声明甚至不存在.Clang产生错误.问题是,哪个编译器最符合标准?

我已经看到依赖于MSVC行为的遗留生产代码,我不确定它是否可以继续依赖.

class S
{
    struct P {};
};

template<typename T>
S::P Bat(T);
Run Code Online (Sandbox Code Playgroud)

在MSVC10中干净地编译:

E:\clangbuild\bin\Release>cl /c /nologo test.cpp
test.cpp
Run Code Online (Sandbox Code Playgroud)

在Clang中产生错误:

E:\clangbuild\bin\Release>clang++ test.cpp
test.cpp:9:4: error: 'P' is a private member of 'S'
S::P Bat(T);
   ^
test.cpp:5:9: note: implicitly declared private here
struct P {};
        ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

c++ templates clang visual-c++

11
推荐指数
1
解决办法
2371
查看次数

标签 统计

c++ ×1

clang ×1

templates ×1

visual-c++ ×1