如果typedef使用它所在的类作为参数,是否存在将typedef放入类中的任何缺陷?
#include <memory>
class Foo{
public:
typedef std::shared_ptr<Foo> shared_ptr;
}
void main(){
Foo x;
Foo::shared_ptr p = std::make_shared<Foo>();
}
上面的代码适合我(clang),但我想知道标准是否有任何关于它的说法。
typedef
类中的Foo
是一个声明而不是定义,所以允许你做你正在做的事情。如果它是一个定义则不允许,因为Foo
类的定义在结束括号之前是不完整的。
6.1声明和定义[basic.def]
2声明是一个定义,除非 ...
(2.9) - 这是一个
typedef
宣言(10.1.3),
但如果你做了这样的事情:
class Foo{
public:
Foo f; //A definition
}
Foo f
将被视为一个定义,compiler will issue an error像:
error: field has incomplete type 'Foo' Foo f; ^ <source>:1:7: note: definition of 'Foo' is not complete until the closing '}' class Foo{