#include <iostream>
template <int K>
struct postbox
{
int val() const
{
return K;
}
};
template <int A, int B, int C>
struct postoffice
{
postbox<A> _a;
template<int I>
postbox<I> get_postbox()
{
switch( I )
{
case A: return _a;
}
}
};
template <typename PO>
struct zipcode
{
PO my_postoffice;
template<int K>
postbox<K> get_postbox()
{
// The error is on this line
return my_postoffice.template get_postbox<K>();
}
};
// Here's a function template that isn't a member, and it compiles.
template<int D>
int non_member_function_template()
{
postoffice<123,345,678> po;
auto box = po.template get_postbox<D>();
return box.val();
}
int main()
{
std::cout << std::to_string(non_member_function_template<123>()) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPGludCBLPgpzdHJ1Y3QgcG9zdGJveAp7CiAgICBpbnQgdmFsKCkgY29uc3QgCiAgICB7CiAgICAgIHJldHVybiBLOwogICAgfQp9OwoKdGVtcGxhdGUgPGludCBBLCBpbnQgQiwgaW50IEM+CnN0cnVjdCBwb3N0b2ZmaWNlCnsKICBwb3N0Ym94PEE+IF9hOwoKICB0ZW1wbGF0ZTxpbnQgST4KICBwb3N0Ym94PEk+IGdldF9wb3N0Ym94KCkKICB7CiAgICBzd2l0Y2goIEkgKQogICAgewogICAgICBjYXNlIEE6IHJldHVybiBfYTsKICAgIH0KICB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgUE8+CnN0cnVjdCB6aXBjb2RlCnsKICBQTyBteV9wb3N0b2ZmaWNlOwoKICB0ZW1wbGF0ZTxpbnQgSz4KICBwb3N0Ym94PEs+IGdldF9wb3N0Ym94KCkKICB7CiAgICAvLyBUaGUgZXJyb3IgaXMgb24gdGhpcyBsaW5lCiAgICByZXR1cm4gbXlfcG9zdG9mZmljZS50ZW1wbGF0ZSBnZXRfcG9zdGJveDxLPigpOwogIH0KfTsKCi8vIEhlcmUncyBhIGZ1bmN0aW9uIHRlbXBsYXRlIHRoYXQgaXNuJ3QgYSBtZW1iZXIsIGFuZCBpdCBjb21waWxlcy4KdGVtcGxhdGU8aW50IEQ+CmludCBub25fbWVtYmVyX2Z1bmN0aW9uX3RlbXBsYXRlKCkKewogIHBvc3RvZmZpY2U8MTIzLDM0NSw2Nzg+IHBvOwogIGF1dG8gYm94ID0gcG8udGVtcGxhdGUgZ2V0X3Bvc3Rib3g8RD4oKTsKICByZXR1cm4gYm94LnZhbCgpOyAKfQoKaW50IG1haW4oKQp7CiAgc3RkOjpjb3V0IDw8IHN0ZDo6dG9fc3RyaW5nKG5vbl9tZW1iZXJfZnVuY3Rpb25fdGVtcGxhdGU8MTIzPigpKSA8PCBzdGQ6OmVuZGw7Cn0=