https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66649
Bug ID: 66649 Summary: variable template specializations not being found Product: gcc Version: 5.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: public at alisdairm dot net Target Milestone: --- Created attachment 35841 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=35841&action=edit C++ code that should compile in C++14 mode, but fails The attached file shows a simple test case for variable templates that I believe is correct, and passes with Clang: template <typename T, typename U> constexpr bool is_same_v = false; template <typename T> constexpr bool is_same_v<T, T> = true; template <typename T> auto make() -> T; template <typename T> void AssertMakeSame() { static_assert( is_same_v<T, T>, "Type should be the same as itself"); static_assert( is_same_v<decltype(make<T>()), T>, "make should produce the same type"); }; int main() { AssertMakeSame<int>(); // AssertMakeSame<int const>(); // Should be an error AssertMakeSame<int *>(); } In gcc 5, I get an error that the partial specialization must be at namespace scope, but this appears to be fixed in trunk. However, all 4 static asserts fire in both trunk and 5. Tested with: g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/opt/local/libexec/gcc/x86_64-apple-darwin14/6.0.0/lto-wrapper Target: x86_64-apple-darwin14 Configured with: /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_gcc6/gcc6/work/gcc-6-20150614/configure --prefix=/opt/local --build=x86_64-apple-darwin14 --enable-languages=c,c++,objc,obj-c++,lto,fortran,java --libdir=/opt/local/lib/gcc6 --includedir=/opt/local/include/gcc6 --infodir=/opt/local/share/info --mandir=/opt/local/share/man --datarootdir=/opt/local/share/gcc-6 --with-local-prefix=/opt/local --with-system-zlib --disable-nls --program-suffix=-mp-6 --with-gxx-include-dir=/opt/local/include/gcc6/c++/ --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local --with-isl=/opt/local --enable-stage1-checking --disable-multilib --enable-lto --enable-libstdcxx-time --with-as=/opt/local/bin/as --with-ld=/opt/local/bin/ld --with-ar=/opt/local/bin/ar --with-bugurl=https://trac.macports.org/newticket --with-pkgversion='MacPorts gcc6 6-20150614_0' Thread model: posix gcc version 6.0.0 20150614 (experimental) (MacPorts gcc6 6-20150614_0) and with: g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/opt/local/libexec/gcc/x86_64-apple-darwin14/5.1.0/lto-wrapper Target: x86_64-apple-darwin14 Configured with: /opt/local/var/macports/build/_opt_mports_dports_lang_gcc5/gcc5/work/gcc-5.1.0/configure --prefix=/opt/local --build=x86_64-apple-darwin14 --enable-languages=c,c++,objc,obj-c++,lto,fortran,java --libdir=/opt/local/lib/gcc5 --includedir=/opt/local/include/gcc5 --infodir=/opt/local/share/info --mandir=/opt/local/share/man --datarootdir=/opt/local/share/gcc-5 --with-local-prefix=/opt/local --with-system-zlib --disable-nls --program-suffix=-mp-5 --with-gxx-include-dir=/opt/local/include/gcc5/c++/ --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local --with-isl=/opt/local --enable-stage1-checking --disable-multilib --enable-lto --enable-libstdcxx-time --with-as=/opt/local/bin/as --with-ld=/opt/local/bin/ld --with-ar=/opt/local/bin/ar --with-bugurl=https://trac.macports.org/newticket --with-pkgversion='MacPorts gcc5 5.1.0_1' Thread model: posix gcc version 5.1.0 (MacPorts gcc5 5.1.0_1)