为什么模板类构造函数使用Visual Studio调用缺少的参数?

时间:2018-03-02 16:32:15

标签: c++ visual-studio templates

我在Visual Studio 2017中新创建的控制台应用程序中有以下代码:

// TemplateTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>

template<typename T>
class Base
{
protected:
    Base(int a, int b, int c)
    {
        std::cout << "Base ctor\n";
    }
};

template<typename T>
class Child : Base<T>
{
public:
    Child() : Base<T>{ 1, 2 } // <- should not compile because of missing third argument
    {
        std::cout << "Child ctor\n";
    }
};

int main()
{
    Child<int> c;
    return 0;
}

我认为这不应该编译。至少使用gcc 6.3 it doesn't 。但是使用Visual Studio,它可以编译并运行得很好,输出如下:

  

Child ctor
  按任意键继续 。 。

为什么用Visual Studio编译?

如果我将构造函数调用与此交换,它不会编译并显示正确的错误消息:

Child() : Base<T>( 1, 2 )
Error C2661: 'Base<T>::Base': no overloaded function takes 2 arguments (21)

我使用的是Visual Studio Professional 2017版本15.5.7。

0 个答案:

没有答案