template <typename T, int x, int y>
struct M;
template <>
struct M<float, 3, 3>
{
static M<float, 3, 3> bar()
{
return {};
}
};
typedef M<float, 3, 3> M3f;
struct Foo
{
//M<float, 3, 3> m = M3f::bar(); // Works
M<float, 3, 3> m = M<float, 3, 3>::bar(); // Does not work
};
int main() {}
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCB4LCBpbnQgeT4Kc3RydWN0IE07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgTTxmbG9hdCwgMywgMz4KewogICAgc3RhdGljIE08ZmxvYXQsIDMsIDM+IGJhcigpCiAgICB7CiAgICAgICAgcmV0dXJuIHt9OwogICAgfQp9OwoKdHlwZWRlZiBNPGZsb2F0LCAzLCAzPiBNM2Y7CgpzdHJ1Y3QgRm9vCnsKICAgIC8vTTxmbG9hdCwgMywgMz4gbSA9IE0zZjo6YmFyKCk7IC8vIFdvcmtzCiAgICBNPGZsb2F0LCAzLCAzPiBtID0gTTxmbG9hdCwgMywgMz46OmJhcigpOyAvLyBEb2VzIG5vdCB3b3JrCn07CgppbnQgbWFpbigpIHt9Cg==