Я могу представить следующий код:
template <typename T> class X
{
public:
T container;
void foo()
{
if(is_vector(T))
container.push_back(Z);
else
container.insert(Z);
}
}
// somewhere else...
X<std::vector<sth>> abc;
abc.foo();
Как написать, успешно скомпилировать? Я знаю черты типа, но когда я определяю:
template<typename T> struct is_vector : public std::false_type {};
template<typename T, typename A>
struct is_vector<std::vector<T, A>> : public std::true_type {};
Он не компилируется:
error: no matching function for call to 'std::vector<sth>::insert(Z)'
static_assert также не то, что я ищу. Любые советы?
Вот краткий пример того, чего я хочу достичь (SSC C E): http://ideone.com/D3vBph