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

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

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;
}

4

Решение

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

Наследование конструкторов не реализованы в VC ++ 2013 ССЫЛКА НА САЙТ.

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

Покопавшись немного, я обнаружил, что точно так же ошибка с тем же примером сообщили сегодня утром ССЫЛКА НА САЙТ.

Нижняя линия: Это ошибка VC ++ 2014, о которой уже сообщалось.

4

Другие решения


По вопросам рекламы [email protected]