2011-03-29 Jason Merrill <jason@redhat.com>
+ PR c++/48319
+ * pt.c (value_dependent_expression_p): Handle TEMPLATE_ID_EXPR.
+
PR c++/48089
* semantics.c (potential_constant_expression_1): Change error about
use of *this in constructor into sorry.
return false;
}
+ case TEMPLATE_ID_EXPR:
+ /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
+ type-dependent. */
+ return type_dependent_expression_p (expression);
+
default:
/* A constant expression is value-dependent if any subexpression is
value-dependent. */
2011-03-29 Jason Merrill <jason@redhat.com>
+ * g++.dg/cpp0x/dependent1.C: New.
+
* g++.dg/cpp0x/constexpr-48089.C: Adjust.
* g++.dg/cpp0x/constexpr-memfn1.C: New.
--- /dev/null
+// PR c++/48319
+// { dg-options -std=c++0x }
+// We were failing to recognize declval<_Args1> as dependent.
+
+template<typename Tp> Tp declval() noexcept;
+
+template<typename _Tp>
+class __is_constructible_helper
+{
+ typedef char __one;
+ typedef struct { char __arr[2]; } __two;
+
+ template<typename _Tp1, typename... _Args1>
+ static decltype(_Tp1(declval<_Args1>()...), __one()) __test(int);
+
+ template<typename, typename...>
+ static __two __test(...);
+
+public:
+ static const bool __value = sizeof(__test<_Tp>(0)) == 1;
+};
+
+int main() {
+ return __is_constructible_helper<int>::__value;
+}