#include <iostream>
template<int, int>
struct G1
{
G1()
{
std::cout << "G1\n";
}
};
template<int, int>
struct G2
{
G2()
{
std::cout << "G2\n";
}
};
template<template<int, int> class T>
struct Foo
{
T<7, 42> M;
};
template<bool Condition, template<int, int> class T, template<int, int> class U>
struct Conditional_asfdlol
{
template<int A, int B>
struct Type : public T<A, B>
{
};
};
template<bool Condition, template<int, int> class T, template<int, int> class U>
struct Conditional_camper
{
template<int A, int B>
struct Apply
{
typedef U<A,B> Type;
};
};
int main()
{
Foo<G1> F1;
Foo<G2> F2;
Foo<Conditional_asfdlol<true, G1, G2>::Type> F3;
Foo<Conditional_camper<false, G1, G2>::Apply> F4; // Nicht das gewünschte Ergebnis
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8aW50LCBpbnQ+CnN0cnVjdCBHMQp7CglHMSgpCgl7IAoJCXN0ZDo6Y291dCA8PCAiRzFcbiI7Cgl9Cn07Cgp0ZW1wbGF0ZTxpbnQsIGludD4Kc3RydWN0IEcyCnsKCUcyKCkKCXsgCgkJc3RkOjpjb3V0IDw8ICJHMlxuIjsKCX0KfTsKCnRlbXBsYXRlPHRlbXBsYXRlPGludCwgaW50PiBjbGFzcyBUPgpzdHJ1Y3QgRm9vCnsKCVQ8NywgNDI+IE07Cn07Cgp0ZW1wbGF0ZTxib29sIENvbmRpdGlvbiwgdGVtcGxhdGU8aW50LCBpbnQ+IGNsYXNzIFQsIHRlbXBsYXRlPGludCwgaW50PiBjbGFzcyBVPiAKc3RydWN0IENvbmRpdGlvbmFsX2FzZmRsb2wgCnsgCgl0ZW1wbGF0ZTxpbnQgQSwgaW50ICBCPiAKCXN0cnVjdCBUeXBlIDogcHVibGljIFQ8QSwgQj4gCgl7IAoJfTsgCn07Cgp0ZW1wbGF0ZTxib29sIENvbmRpdGlvbiwgdGVtcGxhdGU8aW50LCBpbnQ+IGNsYXNzIFQsIHRlbXBsYXRlPGludCwgaW50PiBjbGFzcyBVPgpzdHJ1Y3QgQ29uZGl0aW9uYWxfY2FtcGVyCnsKCXRlbXBsYXRlPGludCBBLCBpbnQgIEI+CglzdHJ1Y3QgQXBwbHkKCXsKCQl0eXBlZGVmIFU8QSxCPiBUeXBlOwoJfTsKfTsKCmludCBtYWluKCkKewoJRm9vPEcxPiBGMTsKCUZvbzxHMj4gRjI7CgkKCUZvbzxDb25kaXRpb25hbF9hc2ZkbG9sPHRydWUsIEcxLCBHMj46OlR5cGU+IEYzOwoJRm9vPENvbmRpdGlvbmFsX2NhbXBlcjxmYWxzZSwgRzEsIEcyPjo6QXBwbHk+IEY0OyAvLyBOaWNodCBkYXMgZ2V3w7xuc2NodGUgRXJnZWJuaXMKfQ==