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, о которой уже сообщалось.