Рассмотрим код:
#include <memory>
template <class T, class Deleter = std::default_delete<T>>
class unique_ptr_wrapper: public std::unique_ptr<T, Deleter>
{
public:
using typename std::unique_ptr<T, Deleter>::unique_ptr;
operator T* () const {return this->get();}
};
int main()
{
unique_ptr_wrapper<int> upw{new int{42}};
}
g++5.1 компилирует нормально, хотя clang++ жалуется
ошибка: имя типа разрешено только для идентификаторов
Я согласен, что у нас здесь нет идентификатора, поэтому, вероятно, typename
не требуется. Но действительно ли это запрещено? Требуется ли компилятору хотя бы выдавать диагностику?
EDIT Код компилируется без typename
как g++, так и clang++.
ОБНОВЛЕНИЕ Похоже, это ошибка g++, я сообщил об этом здесь.
typename
? - person WhozCraig   schedule 31.05.2015unique_ptr
— это идентификатор. Но здесь он называет конструктор, а не тип, поэтомуtypename
не подходит. - person aschepler   schedule 31.05.2015typename
. - person vsoftco   schedule 31.05.2015