java typedef的用法_typedef名称可以用于声明或定义构造函数吗?

Standardese:

[class.ctor] 12.1 / 1说

特殊的声明符语法用于声明或定义构造函数 . 语法使用: - 一个可选的decl-specifier-seq,其中每个decl-specifier都是一个函数说明符或constexpr, - 构造函数的类名,以及 - 该顺序的参数列表 .

[class.name] 9.1 / 4说

命名类类型或其cv限定版本的typedef-name(7.1.3)也是类名 . 如果在需要类名的地方使用了命名cv限定类类型的typedef-name,则忽略cv限定符 . typedef-name不得用作class-head中的标识符 .

另外[expr.prim.general] 5.1.1 / 8说

如果使用class-name :: class-name,并且两个类名称引用同一个类,则此表示法命名构造函数(12.1) .

申请:

在我看来,应该允许使用typedef名称来声明构造函数(尽管事实上12.1 / 1不使用斜体类名) .

例如,给定:

struct Foo;

typedef Foo Bar;

然后

struct Foo { Bar() {} }; // defines Foo's constructor. - 1

或者代之以

struct Foo;

struct Foo { Foo() };

typedef Foo Bar;

然后

Foo::Bar() {}; // defines Foo's constructor - 2

要么

Bar::Bar() {}; // defines Foo's constructor - 3

要么

Bar::Foo() {}; // defines Foo's constructor - 4

任何这些都应该是合法的 . 然而,似乎没有人接受定义2或3,MSVC接受1,MSVC,clang和gcc都接受4 .

我的分析是否正确,所有这些编译器都错了吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值