Consider a case like the following:
template<typename T>
class A { ... };
template<typename T, typename DataType = std::vector<A<T>>>
class B {
....
DataType data;
...
}
In my case the DataType type can be any std "container", but it must always be specialized with type A. The use of A should be transparent from outside class B, however in the definition of B without the default type for DataType one should explicitly specify e.g. B<int, std::deque<A<int>>. I'd like to remove this possibility and achieve something like:
template<typename T, typename container = std::vector>
class B{
using DataType = container<A<T>>;
...
}
so that I would specialize B like B<int, std::vector>.
Of course it cannot be exactly like this because container in this case should a complete type and then must be specialized. Is there a way to achieve this with c++14?