The following program does not compile with clang r193986: template <typename T> constexpr T PI = T(3.14); template <typename T> constexpr T TAU = 2 * PI<T>; // A: Without this line using TAU below results in a compile error //constexpr double HALF_PI = PI<double> / 2; int main(int argc, char**) { return TAU<double> * argc; } This results in: ~/LLVM/build/Release+Asserts/bin/clang -c -std=c++1y clang.cpp clang.cpp:5:23: error: constexpr variable 'TAU<double>' must be initialized by a constant expression constexpr T TAU = 2 * PI<T>; ~~~~^~ clang.cpp:13:12: note: in instantiation of variable template specialization 'TAU<double>' requested here return TAU<double> * argc; ^ 1 error generated. After uncommenting the line below "A", the code compiles successfully. It seems that a constexpr variable template cannot be used in the definition of another constexpr variable template when it is not used in the definition of a non-template constexpr variable as well.
Fixed by r200714.