Commit 34fdd6b3 by Jason Merrill Committed by Jason Merrill

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
parent d7094316
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> 2013-08-17 Gabriel Dos Reis <gdr@integrable-solutions.net>
* error.c (dump_scope): Add a cxx_pretty_printer parameter. * error.c (dump_scope): Add a cxx_pretty_printer parameter.
......
...@@ -3062,8 +3062,10 @@ push_class_level_binding_1 (tree name, tree x) ...@@ -3062,8 +3062,10 @@ push_class_level_binding_1 (tree name, tree x)
if (name == error_mark_node) if (name == error_mark_node)
return false; return false;
/* Check for invalid member names. */ /* Check for invalid member names. But don't worry about a default
gcc_assert (TYPE_BEING_DEFINED (current_class_type)); 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. */ /* Check that we're pushing into the right binding level. */
gcc_assert (current_class_type == class_binding_level->this_entity); gcc_assert (current_class_type == class_binding_level->this_entity);
......
// 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);
}
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