1*0333dd95SReid Kleckner 2*0333dd95SReid Kleckner template <typename T> 3*0333dd95SReid Kleckner constexpr T my_pi = T(3.1415926535897932385L); // variable template 4*0333dd95SReid Kleckner 5*0333dd95SReid Kleckner template <> constexpr char my_pi<char> = '3'; // variable template specialization 6*0333dd95SReid Kleckner 7*0333dd95SReid Kleckner template <typename T> 8*0333dd95SReid Kleckner struct Wrapper { 9*0333dd95SReid Kleckner template <typename U> static constexpr U my_const = U(1); 10*0333dd95SReid Kleckner // Variable template partial specialization with member variable. 11*0333dd95SReid Kleckner template <typename U> static constexpr U *my_const<const U *> = (U *)(0); 12*0333dd95SReid Kleckner }; 13*0333dd95SReid Kleckner 14*0333dd95SReid Kleckner constexpr char a[] = "hello"; 15*0333dd95SReid Kleckner 16*0333dd95SReid Kleckner template <> template <> 17*0333dd95SReid Kleckner constexpr const char *Wrapper<float>::my_const<const char *> = a; 18