gpt4 book ai didi

c++ - 如果用作模板参数的类型在需要完整类型的上下文中内部使用,则何时必须完整?

转载 作者:可可西里 更新时间:2023-11-01 17:59:45 27 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Incomplete class usage in template

我有一个问题困扰了我几个小时。

最初我认为该类型在实例化点必须是完整的,但我尝试过的所有编译器都接受该类型在该点仍然是不完整的,只要它被定义翻译单元中的任何位置。

为了说明这一点,问题是关于这个简单程序的正确性:

template <typename T>
int size() {
return sizeof(T); // T is required to be complete in this expression
}
class test; // test is declared, but incomplete

int main() {
size<test>();
}
// [1] point of instantiation of size<test>()

class test {}; // Definition of test, now it is complete

根据 §14.6.4.1/1 size<test> 的实例化点是标记为 [1] 的行,此时类型为 test仍然不完整。如果我们尝试执行 sizeof(test)在那里操作,编译器会告诉我们类型不完整。然而,调用一个模板,在该模板中执行相同操作的类型在 g++、clang++、comeau 和 Visual Studio 2010 中编译。

前面的代码真的正确吗?如果在同一翻译单元中的任何地方都是完整,那么标准中的哪个地方支持将用作模板参数的类型视为完整?或者什么时候必须完成?

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com