30 lines
892 B
C++
30 lines
892 B
C++
// RUN: %clang_cc1 -std=c++17 -verify %s
|
|
// expected-no-diagnostics
|
|
template<bool> struct DominatorTreeBase {
|
|
static constexpr bool IsPostDominator = true;
|
|
};
|
|
extern template class DominatorTreeBase<false>;
|
|
constexpr bool k = DominatorTreeBase<false>::IsPostDominator;
|
|
|
|
namespace CompleteType {
|
|
template<unsigned N> constexpr int f(const bool (&)[N]) { return 0; }
|
|
|
|
template<bool ...V> struct X {
|
|
static constexpr bool arr[] = {V...};
|
|
static constexpr int value = f(arr);
|
|
};
|
|
|
|
constexpr int n = X<true>::value;
|
|
}
|
|
|
|
template <typename T> struct A {
|
|
static const int n;
|
|
static const int m;
|
|
constexpr int f() { return n; }
|
|
constexpr int g() { return n; }
|
|
};
|
|
template <typename T> constexpr int A<T>::n = sizeof(A) + sizeof(T);
|
|
template <typename T> inline constexpr int A<T>::m = sizeof(A) + sizeof(T);
|
|
static_assert(A<int>().f() == 5);
|
|
static_assert(A<int>().g() == 5);
|