Этот код:
#include <memory>
template <template <typename> class Ptr>
class A { Ptr<int> ints; };
using B = A<std::unique_ptr>;
выдает следующую ошибку (с GCC 6.3):
a.cpp:6:28: error: type/value mismatch at argument 1 in template parameter list for ‘template<template<class> class Ptr> class A’
using B = A<std::unique_ptr>;
^
a.cpp:6:28: note: expected a template of type ‘template<class> class Ptr’, got ‘template<class _Tp, class _Dp> class std::unique_ptr’
Теперь я могу обойти это, например:
template <typename T>
using plugged_unique_ptr = std::unique_ptr<T>;
using B = A<plugged_unique_ptr>;
но почему я должен? Я имею в виду, почему компилятор не желает «подключить» второй параметр шаблона std::unique_ptr
к его значению по умолчанию и разрешить использование std::unique_ptr
в качестве аргумента шаблона для A
?
C++17
. - person HolyBlackCat   schedule 16.07.2018