c++: DR 1722: Make lambda to function pointer conv noexcept [PR90583]
DR 1722 clarifies that the conversion function from lambda to pointer to function should be noexcept(true). gcc/cp/ChangeLog: PR c++/90583 DR 1722 * lambda.c (maybe_add_lambda_conv_op): Mark the conversion function as noexcept. gcc/testsuite/ChangeLog: PR c++/90583 DR 1722 * g++.dg/cpp0x/lambda/lambda-conv14.C: New test.
This commit is contained in:
parent
7029dfa38b
commit
defceb206b
@ -1189,6 +1189,8 @@ maybe_add_lambda_conv_op (tree type)
|
||||
tree name = make_conv_op_name (rettype);
|
||||
tree thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
|
||||
tree fntype = build_method_type_directly (thistype, rettype, void_list_node);
|
||||
/* DR 1722: The conversion function should be noexcept. */
|
||||
fntype = build_exception_variant (fntype, noexcept_true_spec);
|
||||
tree convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
|
||||
SET_DECL_LANGUAGE (convfn, lang_cplusplus);
|
||||
tree fn = convfn;
|
||||
|
10
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv14.C
Normal file
10
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv14.C
Normal file
@ -0,0 +1,10 @@
|
||||
// PR c++/90583
|
||||
// DR 1722: Lambda to function pointer conversion should be noexcept.
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
void
|
||||
foo ()
|
||||
{
|
||||
auto l = [](int){ return 42; };
|
||||
static_assert(noexcept((int (*)(int))(l)), "");
|
||||
}
|
Loading…
Reference in New Issue
Block a user