re PR c++/58083 (ICE with lambda as default parameter of a template function)
PR c++/58083 * name-lookup.c (push_class_level_binding_1): It's OK to push a lambda type after the enclosing type is complete. From-SVN: r201822
This commit is contained in:
parent
d709431600
commit
34fdd6b31e
3 changed files with 40 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
2013-08-17 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/58083
|
||||
* name-lookup.c (push_class_level_binding_1): It's OK to push a
|
||||
lambda type after the enclosing type is complete.
|
||||
|
||||
2013-08-17 Gabriel Dos Reis <gdr@integrable-solutions.net>
|
||||
|
||||
* error.c (dump_scope): Add a cxx_pretty_printer parameter.
|
||||
|
|
|
@ -3062,8 +3062,10 @@ push_class_level_binding_1 (tree name, tree x)
|
|||
if (name == error_mark_node)
|
||||
return false;
|
||||
|
||||
/* Check for invalid member names. */
|
||||
gcc_assert (TYPE_BEING_DEFINED (current_class_type));
|
||||
/* Check for invalid member names. But don't worry about a default
|
||||
argument-scope lambda being pushed after the class is complete. */
|
||||
gcc_assert (TYPE_BEING_DEFINED (current_class_type)
|
||||
|| LAMBDA_TYPE_P (TREE_TYPE (decl)));
|
||||
/* Check that we're pushing into the right binding level. */
|
||||
gcc_assert (current_class_type == class_binding_level->this_entity);
|
||||
|
||||
|
|
30
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg5.C
Normal file
30
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg5.C
Normal file
|
@ -0,0 +1,30 @@
|
|||
// PR c++/58083
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
namespace details {
|
||||
struct iterator_concept_checker
|
||||
{
|
||||
typedef char yes_type;
|
||||
typedef char (&no_type)[2];
|
||||
|
||||
template <typename T>
|
||||
static no_type test(...);
|
||||
|
||||
template <typename T>
|
||||
static yes_type test(
|
||||
int*
|
||||
, void (*)(T) = [](T it)
|
||||
{
|
||||
auto copy = T{it}; // copy constructible
|
||||
copy = it; // copy assignable
|
||||
copy.~T(); // destroyable
|
||||
++it; // incrementable
|
||||
}
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
details::iterator_concept_checker::test<int>(0);
|
||||
}
|
Loading…
Add table
Reference in a new issue