I recently came across an interesting GCC quirk when using the universal function lambdas (C ++ 14, which allows you to use auto as a lambda parameter). It seems that using auto instead of type somehow affects the capture of the "this" pointer. I reproduced the problem in the following example:
The code above works. When I change the "problematic lines" to:
auto lambda = [&] (const auto k) {
It no longer compiles, but adds a "this" pointer:
auto lambda = [&] (const auto k) {
Fixes a problem. My question is: is there a reasonable reason for this behavior? Or is this GCC an irrational quirk (and perhaps should be reported)?
Here it is inferred from the compiler in case using auto without this
test.cpp: In lambda function: test.cpp:12:13: internal compiler error: Segmentation fault method(k); ^ 0x848ecc crash_signal ../../src/gcc/toplev.c:383 0xea28e5 size_binop_loc(unsigned int, tree_code, tree_node*, tree_node*) ../../src/gcc/fold-const.c:1768 0xee86d7 gimplify_compound_lval ../../src/gcc/gimplify.c:2039 0xee86d7 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../src/gcc/gimplify.c:8052 0xeeb639 gimplify_arg(tree_node**, gimple_statement_base**, unsigned int) ../../src/gcc/gimplify.c:2271 0xeeb639 gimplify_call_expr ../../src/gcc/gimplify.c:2477 0xee89f2 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../src/gcc/gimplify.c:8071 0xee8da7 gimplify_stmt(tree_node**, gimple_statement_base**) ../../src/gcc/gimplify.c:5519 0xee8da7 gimplify_cleanup_point_expr ../../src/gcc/gimplify.c:5295 0xee8da7 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../src/gcc/gimplify.c:8463 0xee7ace gimplify_stmt(tree_node**, gimple_statement_base**) ../../src/gcc/gimplify.c:5519 0xee94db gimplify_bind_expr ../../src/gcc/gimplify.c:1136 0xee94db gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../src/gcc/gimplify.c:8297 0xee757f gimplify_stmt(tree_node**, gimple_statement_base**) ../../src/gcc/gimplify.c:5519 0xee757f gimplify_body(tree_node*, bool) ../../src/gcc/gimplify.c:9234 0xee72fd gimplify_function_tree(tree_node*) ../../src/gcc/gimplify.c:9388 0xe195e0 cgraph_node::analyze() ../../src/gcc/cgraphunit.c:634 0xe195e0 analyze_functions ../../src/gcc/cgraphunit.c:1024 0x127d1ab symbol_table::finalize_compilation_unit() ../../src/gcc/cgraphunit.c:2453 0xd37db5 cp_write_global_declarations() ../../src/gcc/cp/decl2.c:4843 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.
Compiled with GCC 5.3.1