template<typename T, typename U>
struct TemplateClass;
template<typename T, typename U = typename TemplateClass<T, void>::DefaultU>
struct TemplateClass {
class DefaultU {
T foo;
/* ... */
};
T& baz;
U bar;
/* ... */
};
int main()
{
int a = 0;
TemplateClass<int, int>::DefaultU b;
TemplateClass<int, decltype(b)> foo = {a, b};
}
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4Kc3RydWN0IFRlbXBsYXRlQ2xhc3M7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVID0gdHlwZW5hbWUgVGVtcGxhdGVDbGFzczxULCB2b2lkPjo6RGVmYXVsdFU+CnN0cnVjdCBUZW1wbGF0ZUNsYXNzIHsKCQogIGNsYXNzIERlZmF1bHRVIHsKICAgIFQgZm9vOwogICAgLyogLi4uICovCiAgfTsKICAKICAKICBUJiBiYXo7CiAgVSBiYXI7CiAgLyogLi4uICovCn07CgoKaW50IG1haW4oKQp7CgkKCWludCBhID0gMDsKCVRlbXBsYXRlQ2xhc3M8aW50LCBpbnQ+OjpEZWZhdWx0VSBiOwoJVGVtcGxhdGVDbGFzczxpbnQsIGRlY2x0eXBlKGIpPiBmb28gPSB7YSwgYn07Cn0=