#include <iostream>
#include <type_traits>
template <typename c1, typename c2, typename c3>
struct Config{};
struct x{};
struct y{};
struct z{};
struct a{};
struct b{};
struct c{};
using CONFIG1 = Config<x, y, z>;
using CONFIG2 = Config<a, b, c>;
//using CONFIG3 = Config<x, y, z>;
struct CONFIG3 : CONFIG1{};
template <class CONFIG>
struct MyClass{};
template <>
struct MyClass<CONFIG1>{};
template <>
struct MyClass<CONFIG2>{};
template <>
struct MyClass<CONFIG3>{};
int main() {
std::cout << std::boolalpha;
std::cout << std::is_same<CONFIG1, CONFIG3>::value << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgYzEsIHR5cGVuYW1lIGMyLCB0eXBlbmFtZSBjMz4Kc3RydWN0IENvbmZpZ3t9OwoKc3RydWN0IHh7fTsKc3RydWN0IHl7fTsKc3RydWN0IHp7fTsKCnN0cnVjdCBhe307CnN0cnVjdCBie307CnN0cnVjdCBje307Cgp1c2luZyBDT05GSUcxID0gQ29uZmlnPHgsIHksIHo+Owp1c2luZyBDT05GSUcyID0gQ29uZmlnPGEsIGIsIGM+OwovL3VzaW5nIENPTkZJRzMgPSBDb25maWc8eCwgeSwgej47CnN0cnVjdCBDT05GSUczIDogQ09ORklHMXt9OyAKCnRlbXBsYXRlIDxjbGFzcyBDT05GSUc+CnN0cnVjdCBNeUNsYXNze307Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgTXlDbGFzczxDT05GSUcxPnt9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IE15Q2xhc3M8Q09ORklHMj57fTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBNeUNsYXNzPENPTkZJRzM+e307CgoKaW50IG1haW4oKSB7CglzdGQ6OmNvdXQgPDwgc3RkOjpib29sYWxwaGE7CglzdGQ6OmNvdXQgPDwgc3RkOjppc19zYW1lPENPTkZJRzEsIENPTkZJRzM+Ojp2YWx1ZSA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gMDsKfQ==