Commit 5b9e705e by Jason Merrill Committed by Jason Merrill

re PR c++/48319 ([C++0x] Segmentation fault in instantiation of std::is_constructible<int>)

	PR c++/48319
	* pt.c (value_dependent_expression_p): Handle TEMPLATE_ID_EXPR.

From-SVN: r171689
parent 00a0d6f3
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.
......
......@@ -18218,6 +18218,11 @@ value_dependent_expression_p (tree expression)
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.
......
// 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment