#include <type_traits>
#include <list>
#include <vector>
#include <string>
template <class T>
struct isSupportedContainer : std::false_type {};
template <class T>
struct isSupportedContainer < std::list<T> > : std::true_type {};
template <class T>
struct isSupportedContainer < std::vector<T> > : std::true_type {};
template <class T, typename = void>
struct isSupported : std::integral_constant<bool, std::is_object<T>::value> {};
template <class Cont>
struct isSupported<Cont, typename std::enable_if<isSupportedContainer<Cont>::value>::type> :
std::integral_constant<bool, isSupported<typename Cont::value_type>::value> {};
int main() {
static_assert(isSupported<std::vector<int>>::value,"");
static_assert(isSupported<std::vector<std::list<int>>>::value,"");
static_assert(isSupported<std::string>::value,"");
static_assert(!isSupported<int&>::value,"");
return 0;
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgaXNTdXBwb3J0ZWRDb250YWluZXIgOiBzdGQ6OmZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IGlzU3VwcG9ydGVkQ29udGFpbmVyIDwgc3RkOjpsaXN0PFQ+ID4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgaXNTdXBwb3J0ZWRDb250YWluZXIgPCBzdGQ6OnZlY3RvcjxUPiA+IDogc3RkOjp0cnVlX3R5cGUge307CiAgICAKdGVtcGxhdGUgPGNsYXNzIFQsIHR5cGVuYW1lID0gdm9pZD4Kc3RydWN0IGlzU3VwcG9ydGVkIDogc3RkOjppbnRlZ3JhbF9jb25zdGFudDxib29sLCBzdGQ6OmlzX29iamVjdDxUPjo6dmFsdWU+IHt9OwoKdGVtcGxhdGUgPGNsYXNzIENvbnQ+CnN0cnVjdCBpc1N1cHBvcnRlZDxDb250LCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxpc1N1cHBvcnRlZENvbnRhaW5lcjxDb250Pjo6dmFsdWU+Ojp0eXBlPiA6CnN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgaXNTdXBwb3J0ZWQ8dHlwZW5hbWUgQ29udDo6dmFsdWVfdHlwZT46OnZhbHVlPiB7fTsKCgppbnQgbWFpbigpIHsKCXN0YXRpY19hc3NlcnQoaXNTdXBwb3J0ZWQ8c3RkOjp2ZWN0b3I8aW50Pj46OnZhbHVlLCIiKTsKCXN0YXRpY19hc3NlcnQoaXNTdXBwb3J0ZWQ8c3RkOjp2ZWN0b3I8c3RkOjpsaXN0PGludD4+Pjo6dmFsdWUsIiIpOwoJc3RhdGljX2Fzc2VydChpc1N1cHBvcnRlZDxzdGQ6OnN0cmluZz46OnZhbHVlLCIiKTsKCXN0YXRpY19hc3NlcnQoIWlzU3VwcG9ydGVkPGludCY+Ojp2YWx1ZSwiIik7CglyZXR1cm4gMDsKfQ==