Visual C++ 14 CTP3: ошибка конструктора наследования C++11?

Следующий фрагмент кода прекрасно собирается под Clang 3.4/3.5 (Xcode 5/6), но выдает ошибку под CTP3 Visual C++ 14:

1> ------ Начата сборка: Проект: InheritingConstructor, Конфигурация:
Отладка Win32 ------ 1> inheritingconstructor.cpp(60): ошибка C2661:
'D:: D': ни одна перегруженная функция не принимает 2 аргумента
========== Построение: 0 выполнено, 1 не выполнено, 0 обновлено, 0 пропущено ===========

Код немного напрягает компилятор, пытаясь унаследовать конструктор шаблона от базового класса, может, именно здесь Visual C++ снова терпит неудачу в конкурентной борьбе? Или я попадаю в какую-то серую область, таким образом, неопределенное поведение в стандарте?

#include "stdafx.h" // comment out this line for Xcode build
#include <iostream>
#include <type_traits>

template <typename X>
struct B
{
    int i;
    B(int i_) : i(i_) {}

    template < typename T, typename = typename std::enable_if<
        std::is_same<T, X>::value >::type >
    B(const T*, const T*) : i(0) {}
};

struct D : B<D>
{
    using B<D>::B; // inherit constructors from B
};

int main(int argc, const char * argv[]) {
    // insert code here...
    D d((D*)nullptr, (D*)nullptr);
    std::cout << "Hello, World!\n";
    return 0;
}

1 ответ

Нет ничего плохого в вашем коде с точки зрения соответствия стандарту.

Наследующие конструкторы не реализованы в VC++ 2013 LINK.

Однако, как указывает эта ССЫЛКА, этот вид функциональности реализован начиная с VTP ++2014 CTP 1.

Немного покопавшись, я обнаружил, что точно такой же ошибкой с тем же примером было сообщено сегодня утром LINK.

Итог: это ошибка VC++2014, о которой уже сообщалось.

Другие вопросы по тегам