相关疑难解决方法(0)

何时检查C++模板实例化类型?

在编译C++时,gcc和clang似乎推迟了模板实例化的类型检查,直到处理完所有程序声明之后.这种语言有保证吗?

为了详细说明,我可以在定义模板或需要模板实例化的位置保持类型不完整,只要我在程序的后面某处完成类型:

class A;
class B;

extern A* pa;

// 1. template definition
template<typename T>
T* f() { return static_cast<T*>(pa); }

// 2. template instantiation
B* test() { return f<B>(); }

// 3. completing types
class A { };
class B : public A { };
Run Code Online (Sandbox Code Playgroud)

请注意,A和B的定义需要键入检查模板实例化(以使static_cast有效).如果省略步骤3,则不再编译第2步.

在我的标题组织中,我可以依赖任何标准C++编译器接受此顺序吗?

c++ templates

5
推荐指数
1
解决办法
182
查看次数

标签 统计

c++ ×1

templates ×1