GCC 4.8.1 принимает
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass<T>::Baseclass;
};
а MSVC - нет. С другой стороны, MSVC принимает
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass::Baseclass;
};
но GCC нет. Затем я видел в этих вопросах объявление другого типа: c++11, наследующий конструкторы шаблонов
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass::Baseclass<T>;
};
для которого MSVC предупреждает об «устаревшем стиле объявления», а GCC говорит
prog.cpp:8:24: error: ‘template<class T> class Baseclass’ used without template parameters
using typename Baseclass::Baseclass<T>;
Я думал, что первым примером будет стандартный синтаксис соответствия. Интуитивно мне кажется, что это правильно.
Что такое синтаксис соответствия стандарту С++ 11?
using Baseclass::BaseClass<T>
должен работать в случаях, когдаBaseClass
сам по себе не является шаблоном класса, но имеет шаблон конструктора. - person Praetorian   schedule 19.09.2014Base::Base(int value)
. Редактировать: и GCC делает это: ideone.com/J0ToW2 - person Niklas R   schedule 19.09.2014Baseclass
иBaseClass
? - person dyp   schedule 19.09.2014Base::Base(int)
будет унаследован, но это не конструктор по умолчанию и не копирующий конструктор. См. [class.inhctor]/3, в котором говорится, что конструкторы по умолчанию и конструкторы копирования/перемещения исключены из набора кандидатов унаследованных конструкторов. - person Praetorian   schedule 19.09.2014BaseClass
перед::
. - person dyp   schedule 19.09.2014using Baseclass<T>::Baseclass;
, а неtypename
, и предоставление аргумента шаблона (по крайней мере) слева от::
. - person dyp   schedule 19.09.2014