Using a constexpr static member of a reference as template argument
问题 I'm trying to figure out whether GCC or Clang interpret the C++17 standard differently / wrong here. This is my code, which does compile using GCC 8, but not using Clang 6: struct BoolHolder { constexpr static bool b = true; }; template<bool b> class Foo {}; int main() { BoolHolder b; Foo<b.b> f; // Works BoolHolder & br = b; Foo<br.b> f2; // Doesn't work } I wonder why that is. Obviously, b.b is a valid constexpr (or the first Foo<b.b> wouldn't be valid). Is br.b not a valid constexpr? Why?