summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp1y/var-templ44.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp1y/var-templ44.C')
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/var-templ44.C29
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ44.C b/gcc/testsuite/g++.dg/cpp1y/var-templ44.C
new file mode 100644
index 0000000000..2fc21a5063
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/var-templ44.C
@@ -0,0 +1,29 @@
+// PR c++/67161
+// { dg-do compile { target c++14 } }
+
+template <typename _Tp> struct integral_constant {
+ static constexpr _Tp value = 0;
+};
+template <bool, typename, typename> struct conditional;
+template <typename...> struct __or_;
+template <typename _B1, typename _B2>
+struct __or_<_B1, _B2> : conditional<1, _B1, _B2>::type {};
+template <typename...> struct __and_;
+template <typename> struct __not_ : integral_constant<bool> {};
+template <typename> struct __is_void_helper : integral_constant<bool> {};
+template <typename> struct is_void : __is_void_helper<int> {};
+template <bool, typename _Iftrue, typename> struct conditional {
+ typedef _Iftrue type;
+};
+template <bool _Cond, typename _Iftrue, typename _Iffalse>
+using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type;
+template <typename...> using common_type_t = int;
+template <typename, int> struct array {};
+template <typename _Tp> constexpr int is_void_v = is_void<_Tp>::value;
+template <typename _Dest = void, typename... _Types>
+constexpr auto make_array()
+ -> array<conditional_t<is_void_v<_Dest>, common_type_t<>, _Dest>,
+ sizeof...(_Types)> {
+ static_assert(__or_<__not_<is_void<_Dest>>, __and_<>>::value, ""); // { dg-error "static assert" }
+}
+auto d = make_array();