Because of a questionable patch (written by Kenji Hara, I think) some time ago, the following works: struct S{ template T(int x){ auto s = x; // implicitly static } } I consider this bad language design.