【发布时间】:2013-12-17 19:01:15
【问题描述】:
C++ 模板至少检查两次。首先,在声明和定义模板时,其次是在实例化模板时。模板成功实例化后,它处于类型安全状态。我的问题是,当模板成功声明和定义时,模板所在状态的名称是什么? 如果我将宏与模板进行比较,在成功的宏“实例化”之后,代码是否是类型安全的?
#define BAR(x) return x;
^
// BAR is preprocessor-grammar-safe here?
struct Bar
{
static void bar() {}
};
^
// Bar is type safe at this point?
template<typename T>
void foo()
{
T::bar();
}
^
// foo is C++-grammar safe at this point?
int main()
{
foo<Bar>();
^
// foo is type safe at this point?
foo<int>();
^
// foo is ill-formed here?
BAR(0);
^
// BAR is type safe at this point?
return 0;
}
【问题讨论】:
-
我不确定 grammar safe 是否有确切的含义,我相信您的问题的答案可能是特定于编译器的......
-
@BasileStarynkevitch 说编译器开发人员:)
-
这是一个加载的问题。你说了很多听起来像话的东西,但实际上并没有任何意义。因此很难做出回应。
-
@Kerrek SB:对不起我的英语。我的问题是, foo 在成功声明后不是类型安全的,只有“语法安全”或“语法正确”。该州的正确名称是什么?
-
我不相信您声称“foo 不是类型安全”的说法有任何意义。 “类型安全”并不意味着您的想法,或者至少您没有以常见的方式使用它。
标签: c++ templates types language-lawyer