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
This commit is contained in:
parent
00a0d6f359
commit
5b9e705e63
@ -1,5 +1,8 @@
|
||||
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. */
|
||||
|
@ -1,5 +1,7 @@
|
||||
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.
|
||||
|
25
gcc/testsuite/g++.dg/cpp0x/dependent1.C
Normal file
25
gcc/testsuite/g++.dg/cpp0x/dependent1.C
Normal file
@ -0,0 +1,25 @@
|
||||
// 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user