Clang 不解析部分特化的模板:template < class T, class U = TYPE_A<T> > class TYPE_B;
Clang does not parse a template with partial specialization: template < class T, class U = TYPE_A<T> > class TYPE_B;
我有带有模板部分特化的模板代码示例。解析时 clang 的位置,return 导致无效声明。
template < class T> class TYPE_A
{
};
template < class T, class U> class TYPE_B
{
};
template < class T, class U = TYPE_A<T> > class TYPE_B;
typedef TYPE_B<double> B_Test;
我有结果转储:
TypedefDecl 0x2024d557af0 <D:\Projects\Reps\NET_Desktop\Rel\Kernel\include\OdArrayPreDef.h:60:1, col:27> col:27 invalid somethingTest 'int'
`-BuiltinType 0x2024caff080 'int'
为什么 clang talking(转储中的最后一行)无效?
偏特化和默认参数之间存在差异。部分特化为不同的模板参数创建不同版本的代码,其中默认参数在未特化时提供模板参数。
我相信你仍然可以混合使用它们并获得你想要的代码:
template < class T> class TYPE_A { };
template < class T, class U = TYPE_A<T> > class TYPE_B { };
template <class T> class TYPE_B<T, TYPE_A<T> > { };
typedef TYPE_B<double> B_Test;
B_Test
class 仍应使用第二个参数为 `TYPE_A 的特化
我尝试只解析这个结构而没有一些#include 结构。
并且解析 typedef 是正确的。
我发现问题有所不同。
预处理器尝试查找#include "file.h" - 但找不到,因此生成 "fatal error: No such file" 并且预处理器已终止。因此,接下来的预处理模板等已经停止。因此,我收到了无效声明。
我发现修复:
-需要将执行该预处理器不会通过 "fatal error: No such file".
终止
我更改了代码(我将构造添加到自定义的 ParseDeclarationAction class,它继承自 ASTFrontendAction):
CI.getPreprocessor().SetSuppressIncludeNotFoundError(true);
结果我有 class:
class ParseDeclarationAction : public ASTFrontendAction
{
public:
virtual unique_ptr CreateASTConsumer(CompilerInstance &CI, StringRef InFile) {
CI.getPreprocessor().SetSuppressIncludeNotFoundError(真);
return unique_ptr(新的 ParseDeclarationConsumer(&CI.getASTContext()));
}
};
我想问题可能会帮助其他 clang 用户。
此任务已解决。
此致,
伊万.
我有带有模板部分特化的模板代码示例。解析时 clang 的位置,return 导致无效声明。
template < class T> class TYPE_A
{
};
template < class T, class U> class TYPE_B
{
};
template < class T, class U = TYPE_A<T> > class TYPE_B;
typedef TYPE_B<double> B_Test;
我有结果转储:
TypedefDecl 0x2024d557af0 <D:\Projects\Reps\NET_Desktop\Rel\Kernel\include\OdArrayPreDef.h:60:1, col:27> col:27 invalid somethingTest 'int'
`-BuiltinType 0x2024caff080 'int'
为什么 clang talking(转储中的最后一行)无效?
偏特化和默认参数之间存在差异。部分特化为不同的模板参数创建不同版本的代码,其中默认参数在未特化时提供模板参数。
我相信你仍然可以混合使用它们并获得你想要的代码:
template < class T> class TYPE_A { };
template < class T, class U = TYPE_A<T> > class TYPE_B { };
template <class T> class TYPE_B<T, TYPE_A<T> > { };
typedef TYPE_B<double> B_Test;
B_Test
class 仍应使用第二个参数为 `TYPE_A 的特化
我尝试只解析这个结构而没有一些#include 结构。
并且解析 typedef 是正确的。
我发现问题有所不同。
预处理器尝试查找#include "file.h" - 但找不到,因此生成 "fatal error: No such file" 并且预处理器已终止。因此,接下来的预处理模板等已经停止。因此,我收到了无效声明。
我发现修复: -需要将执行该预处理器不会通过 "fatal error: No such file".
终止我更改了代码(我将构造添加到自定义的 ParseDeclarationAction class,它继承自 ASTFrontendAction):
CI.getPreprocessor().SetSuppressIncludeNotFoundError(true);
结果我有 class:
class ParseDeclarationAction : public ASTFrontendAction { public: virtual unique_ptr CreateASTConsumer(CompilerInstance &CI, StringRef InFile) { CI.getPreprocessor().SetSuppressIncludeNotFoundError(真); return unique_ptr(新的 ParseDeclarationConsumer(&CI.getASTContext())); } };
我想问题可能会帮助其他 clang 用户。
此任务已解决。
此致, 伊万.