このコード:
#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>;
しかし、なぜ私はしなければならないのですか?つまり、コンパイラが の 2 番目のテンプレート パラメータをstd::unique_ptrデフォルト値で「プラグ」しstd::unique_ptrて、 のテンプレート引数として使用できるようにしないのはなぜAでしょうか?