#include <iostream>
using namespace std;
template <template <typename...> class Wrapper>
struct WrapperTraits { };
template <typename... Whatever>
struct Foo {
private:
// I want Foo here to refer to the template, and not the current
// concrete type (which is injected into the namespace by default)
using Traits = WrapperTraits<Foo>;
};
int main()
{
Foo<double> f;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0ZW1wbGF0ZSA8dGVtcGxhdGUgPHR5cGVuYW1lLi4uPiBjbGFzcyBXcmFwcGVyPgpzdHJ1Y3QgV3JhcHBlclRyYWl0cyB7IH07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gV2hhdGV2ZXI+CnN0cnVjdCBGb28gewpwcml2YXRlOgogICAgLy8gSSB3YW50IEZvbyBoZXJlIHRvIHJlZmVyIHRvIHRoZSB0ZW1wbGF0ZSwgYW5kIG5vdCB0aGUgY3VycmVudAogICAgLy8gY29uY3JldGUgdHlwZSAod2hpY2ggaXMgaW5qZWN0ZWQgaW50byB0aGUgbmFtZXNwYWNlIGJ5IGRlZmF1bHQpCiAgICB1c2luZyBUcmFpdHMgPSBXcmFwcGVyVHJhaXRzPEZvbz47Cn07CgppbnQgbWFpbigpCnsKCUZvbzxkb3VibGU+IGY7CiAgICByZXR1cm4gMDsKfQ==