#include <type_traits>
#include <vector>
#include <string>
#include <iostream>
template <typename T, bool bar = false>
struct foo {
static void show()
{
std::cout << "T" << std::endl;
}
};
template <typename T>
struct foo<typename std::enable_if<std::is_fundamental<T>::value, std::vector<T>>::type, false> {
static void show()
{
std::cout << "std::vector<fundamental type>" << std::endl;
}
};
template <typename T>
struct foo<std::vector<T>, false> {
static void show()
{
std::cout << "std::vector<T>" << std::endl;
}
};
int main()
{
foo<int>::show();
foo<std::vector<int>>::show();
foo<std::vector<std::string>>::show();
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCBiYXIgPSBmYWxzZT4Kc3RydWN0IGZvbyB7CglzdGF0aWMgdm9pZCBzaG93KCkKCXsKCQlzdGQ6OmNvdXQgPDwgIlQiIDw8IHN0ZDo6ZW5kbDsKCX0KfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgZm9vPHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZnVuZGFtZW50YWw8VD46OnZhbHVlLCBzdGQ6OnZlY3RvcjxUPj46OnR5cGUsIGZhbHNlPiB7CglzdGF0aWMgdm9pZCBzaG93KCkKCXsKCQlzdGQ6OmNvdXQgPDwgInN0ZDo6dmVjdG9yPGZ1bmRhbWVudGFsIHR5cGU+IiA8PCBzdGQ6OmVuZGw7Cgl9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGZvbzxzdGQ6OnZlY3RvcjxUPiwgZmFsc2U+IHsKCXN0YXRpYyB2b2lkIHNob3coKQoJewoJCXN0ZDo6Y291dCA8PCAic3RkOjp2ZWN0b3I8VD4iIDw8IHN0ZDo6ZW5kbDsKCX0KfTsKCmludCBtYWluKCkKewoJZm9vPGludD46OnNob3coKTsKCWZvbzxzdGQ6OnZlY3RvcjxpbnQ+Pjo6c2hvdygpOwoJZm9vPHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj46OnNob3coKTsKfQ==
prog.cpp:15:8: error: template parameters not deducible in partial specialization:
struct foo<typename std::enable_if<std::is_fundamental<T>::value, std::vector<T>>::type, false> {
^
prog.cpp:15:8: note: 'T'