public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/64791] New: Generic lambda fails to implicitly capture `const` variable
@ 2015-01-25 21:33 tom at kera dot name
2015-01-25 21:36 ` [Bug c++/64791] " tom at kera dot name
` (6 more replies)
0 siblings, 7 replies; 8+ messages in thread
From: tom at kera dot name @ 2015-01-25 21:33 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64791
Bug ID: 64791
Summary: Generic lambda fails to implicitly capture `const`
variable
Product: gcc
Version: 4.9.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: tom at kera dot name
>From http://stackoverflow.com/q/28141403/560648
Reproduction:
/////////////////////////////
#include <iostream>
#include <functional>
int main()
{
const int a = 2;
std::function<void(int)> f = [&](auto b) { std::cout << a << ", " << b <<
std::endl; };
f(3);
}
/////////////////////////////
Taking any of the following steps allows the program to build and run with the
expected output "2, 3":
- remove `const` from declaration of a
- name `a` in the capture-list instead of relying on implicit capture
- change declaration of `f` from `std::function<void(int)>` to `auto`
- make the lambda non-generic by changing `auto b` to `int b`
- use Clang (e.g. v3.5.0)
Suspect detection of odr-use is breaking, or this could be related to bug
61814, or something else entirely?
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/64791] Generic lambda fails to implicitly capture `const` variable
2015-01-25 21:33 [Bug c++/64791] New: Generic lambda fails to implicitly capture `const` variable tom at kera dot name
@ 2015-01-25 21:36 ` tom at kera dot name
2015-01-25 22:14 ` tom at kera dot name
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: tom at kera dot name @ 2015-01-25 21:36 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64791
--- Comment #1 from Tomalak Geret'kal <tom at kera dot name> ---
Build error:
/////////////////////////////
main.cpp: In instantiation of 'main()::<lambda(auto:1)> [with auto:1 = int]':
/usr/local/include/c++/4.9.2/functional:2149:71: required by substitution of
'template<class _Res, class ... _ArgTypes> template<class _Functor> using
_Invoke = decltype
(std::__callable_functor(declval<_Functor&>())((declval<_ArgTypes>)()...))
[with _Functor = main()::<lambda(auto:1)> _Res = void; _ArgTypes = {int}]'
/usr/local/include/c++/4.9.2/functional:2225:9: required by substitution of
'template<class _Functor, class> std::function<_Res(_ArgTypes
...)>::function(_Functor) [with _Functor = main()::<lambda(auto:1)>
<template-parameter-1-2> = <missing>]'
main.cpp:7:90: required from here
main.cpp:7:58: error: 'a' was not declared in this scope
std::function<void(int)> f = [&](auto b) { std::cout << a << ", " << b <<
std::endl; };
^
/////////////////////////////
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/64791] Generic lambda fails to implicitly capture `const` variable
2015-01-25 21:33 [Bug c++/64791] New: Generic lambda fails to implicitly capture `const` variable tom at kera dot name
2015-01-25 21:36 ` [Bug c++/64791] " tom at kera dot name
@ 2015-01-25 22:14 ` tom at kera dot name
2015-01-27 12:49 ` ville.voutilainen at gmail dot com
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: tom at kera dot name @ 2015-01-25 22:14 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64791
--- Comment #2 from Tomalak Geret'kal <tom at kera dot name> ---
Actually, I'm no longer sure that `a` *is* odr-used...
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/64791] Generic lambda fails to implicitly capture `const` variable
2015-01-25 21:33 [Bug c++/64791] New: Generic lambda fails to implicitly capture `const` variable tom at kera dot name
2015-01-25 21:36 ` [Bug c++/64791] " tom at kera dot name
2015-01-25 22:14 ` tom at kera dot name
@ 2015-01-27 12:49 ` ville.voutilainen at gmail dot com
2015-01-27 12:53 ` ville.voutilainen at gmail dot com
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: ville.voutilainen at gmail dot com @ 2015-01-27 12:49 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64791
Ville Voutilainen <ville.voutilainen at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |rejects-valid
Status|UNCONFIRMED |NEW
Last reconfirmed| |2015-01-27
CC| |paolo.carlini at oracle dot com,
| |ville.voutilainen at gmail dot com
Known to work| |5.0
Ever confirmed|0 |1
Known to fail| |4.8.2, 4.9.1
--- Comment #3 from Ville Voutilainen <ville.voutilainen at gmail dot com> ---
Trunk accepts the code and prints 2, 3 like clang does. So unless there's a
need for an additional testcase or a backport, this looks like a candidate for
closing.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/64791] Generic lambda fails to implicitly capture `const` variable
2015-01-25 21:33 [Bug c++/64791] New: Generic lambda fails to implicitly capture `const` variable tom at kera dot name
` (2 preceding siblings ...)
2015-01-27 12:49 ` ville.voutilainen at gmail dot com
@ 2015-01-27 12:53 ` ville.voutilainen at gmail dot com
2015-01-31 11:56 ` ville.voutilainen at gmail dot com
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: ville.voutilainen at gmail dot com @ 2015-01-27 12:53 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64791
--- Comment #4 from Ville Voutilainen <ville.voutilainen at gmail dot com> ---
Oh, wait a minute, with trunk, I see an incorrect warning:
prog.cc: In function 'int main()':
prog.cc:7:15: warning: variable 'a' set but not used
[-Wunused-but-set-variable]
const int a = 2;
^
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/64791] Generic lambda fails to implicitly capture `const` variable
2015-01-25 21:33 [Bug c++/64791] New: Generic lambda fails to implicitly capture `const` variable tom at kera dot name
` (3 preceding siblings ...)
2015-01-27 12:53 ` ville.voutilainen at gmail dot com
@ 2015-01-31 11:56 ` ville.voutilainen at gmail dot com
2015-01-31 12:18 ` paolo.carlini at oracle dot com
2015-02-02 13:54 ` ville.voutilainen at gmail dot com
6 siblings, 0 replies; 8+ messages in thread
From: ville.voutilainen at gmail dot com @ 2015-01-31 11:56 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64791
--- Comment #6 from Ville Voutilainen <ville.voutilainen at gmail dot com> ---
I ran it with this thing:
http://melpon.org/wandbox/permlink/gAsh89NaSSFspYjq
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/64791] Generic lambda fails to implicitly capture `const` variable
2015-01-25 21:33 [Bug c++/64791] New: Generic lambda fails to implicitly capture `const` variable tom at kera dot name
` (4 preceding siblings ...)
2015-01-31 11:56 ` ville.voutilainen at gmail dot com
@ 2015-01-31 12:18 ` paolo.carlini at oracle dot com
2015-02-02 13:54 ` ville.voutilainen at gmail dot com
6 siblings, 0 replies; 8+ messages in thread
From: paolo.carlini at oracle dot com @ 2015-01-31 12:18 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64791
--- Comment #7 from Paolo Carlini <paolo.carlini at oracle dot com> ---
I know that web page, but today, 20150131, I can't reproduce the issue with the
current tree on my machine.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/64791] Generic lambda fails to implicitly capture `const` variable
2015-01-25 21:33 [Bug c++/64791] New: Generic lambda fails to implicitly capture `const` variable tom at kera dot name
` (5 preceding siblings ...)
2015-01-31 12:18 ` paolo.carlini at oracle dot com
@ 2015-02-02 13:54 ` ville.voutilainen at gmail dot com
6 siblings, 0 replies; 8+ messages in thread
From: ville.voutilainen at gmail dot com @ 2015-02-02 13:54 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64791
--- Comment #9 from Ville Voutilainen <ville.voutilainen at gmail dot com> ---
I can't see any warnings with my trunk build from today, either.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-02-02 13:54 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-25 21:33 [Bug c++/64791] New: Generic lambda fails to implicitly capture `const` variable tom at kera dot name
2015-01-25 21:36 ` [Bug c++/64791] " tom at kera dot name
2015-01-25 22:14 ` tom at kera dot name
2015-01-27 12:49 ` ville.voutilainen at gmail dot com
2015-01-27 12:53 ` ville.voutilainen at gmail dot com
2015-01-31 11:56 ` ville.voutilainen at gmail dot com
2015-01-31 12:18 ` paolo.carlini at oracle dot com
2015-02-02 13:54 ` ville.voutilainen at gmail dot com
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).