C++标准是否允许使用typedef重命名构造函数?

Fer*_*cio 10 c++ constructor typedef

我很惊讶地发现在VC++ 10中,您可以使用typedef来更改类的构造函数的名称:

#include <iostream>

using namespace std;

class A
{
private:
    typedef A alias;

public:
    alias() { cout << "A ctor" << endl; }
};

int main()
{
    A(); // prints "A ctor"
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是标准的C++还是Microsoft扩展?

Ker*_* SB 11

没有; 构造函数没有名称.你不能获取构造函数的地址或传递函数指针,甚至只是像普通函数一样调用它.语法A::A()只是一种特殊的声明符语法,允许您声明和定义构造函数,但它不是名称.

也就是说,无论如何都不能输入dede 对象(包括函数指针),只能输入类型.

为了评论MSVC的行为,我引用了12.1/3:

一个typedef的名称不得使用[...]一个构造函数声明.