public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/111602] New: "Error: symbol is already defined" for variable template dependent on default argument lambda used in sfinae and non-sfinae @ 2023-09-26 17:15 ed at catmur dot uk 2023-09-26 17:22 ` [Bug c++/111602] "Error: symbol is already defined" for variable template dependent on default argument lambda of class dependent on local type used in sfinae and non-sfinae contexts pinskia at gcc dot gnu.org ` (3 more replies) 0 siblings, 4 replies; 5+ messages in thread From: ed at catmur dot uk @ 2023-09-26 17:15 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111602 Bug ID: 111602 Summary: "Error: symbol is already defined" for variable template dependent on default argument lambda used in sfinae and non-sfinae Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ed at catmur dot uk Target Milestone: --- Since gcc 8.1, template<class> constexpr bool V = true; struct F { template<class T, bool = V<T>> F(T) {} }; template<class T> struct C { C(F = []{}) {} }; template<class T> decltype(T()) g() { return T(); } auto f() { struct T {} t; return t; }; int main() { g<C<decltype(f())>>(); } compiled at -O0 (and -std=c++14 or above) causes assembler error: /tmp/cccVZwwU.s: Assembler messages: /tmp/cccVZwwU.s:106: Error: symbol `_Z1VIZN1CIZ1fvE1TEC4E1FEd_UlvE_E' is already defined The symbol demangles as 'V<C<f()::T>::C(F)::{default arg#1}::{lambda()#1}>'. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/111602] "Error: symbol is already defined" for variable template dependent on default argument lambda of class dependent on local type used in sfinae and non-sfinae contexts 2023-09-26 17:15 [Bug c++/111602] New: "Error: symbol is already defined" for variable template dependent on default argument lambda used in sfinae and non-sfinae ed at catmur dot uk @ 2023-09-26 17:22 ` pinskia at gcc dot gnu.org 2023-09-26 17:23 ` [Bug c++/111602] [11/12/13/14 Regression] " pinskia at gcc dot gnu.org ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-09-26 17:22 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111602 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2023-09-26 Ever confirmed|0 |1 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Slightly reduced: ``` template<class> constexpr bool V = true; struct F { template<class T, bool = V<T>> F(T) {} }; template<class T> struct C { C(F = []{}) {} }; template<class T> decltype(T()) g() { return T(); } int main() { g<C<int>>(); } ``` The local type of f() is not needed. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/111602] [11/12/13/14 Regression] "Error: symbol is already defined" for variable template dependent on default argument lambda of class dependent on local type used in sfinae and non-sfinae contexts 2023-09-26 17:15 [Bug c++/111602] New: "Error: symbol is already defined" for variable template dependent on default argument lambda used in sfinae and non-sfinae ed at catmur dot uk 2023-09-26 17:22 ` [Bug c++/111602] "Error: symbol is already defined" for variable template dependent on default argument lambda of class dependent on local type used in sfinae and non-sfinae contexts pinskia at gcc dot gnu.org @ 2023-09-26 17:23 ` pinskia at gcc dot gnu.org 2023-09-26 19:33 ` ed at catmur dot uk 2023-10-25 20:15 ` ppalka at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-09-26 17:23 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111602 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|"Error: symbol is already |[11/12/13/14 Regression] |defined" for variable |"Error: symbol is already |template dependent on |defined" for variable |default argument lambda of |template dependent on |class dependent on local |default argument lambda of |type used in sfinae and |class dependent on local |non-sfinae contexts |type used in sfinae and | |non-sfinae contexts Target Milestone|--- |11.5 Known to fail| |8.1.0 Known to work| |7.1.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/111602] [11/12/13/14 Regression] "Error: symbol is already defined" for variable template dependent on default argument lambda of class dependent on local type used in sfinae and non-sfinae contexts 2023-09-26 17:15 [Bug c++/111602] New: "Error: symbol is already defined" for variable template dependent on default argument lambda used in sfinae and non-sfinae ed at catmur dot uk 2023-09-26 17:22 ` [Bug c++/111602] "Error: symbol is already defined" for variable template dependent on default argument lambda of class dependent on local type used in sfinae and non-sfinae contexts pinskia at gcc dot gnu.org 2023-09-26 17:23 ` [Bug c++/111602] [11/12/13/14 Regression] " pinskia at gcc dot gnu.org @ 2023-09-26 19:33 ` ed at catmur dot uk 2023-10-25 20:15 ` ppalka at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: ed at catmur dot uk @ 2023-09-26 19:33 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111602 --- Comment #2 from Ed Catmur <ed at catmur dot uk> --- (In reply to Andrew Pinski from comment #1) > The local type of f() is not needed. Thanks! I was confused since the local type is required in this similar example: template<class> struct P { static constexpr bool value = true; }; template<class T> constexpr bool P<T>::value; template<bool> struct E {}; struct F { template<class T, class = E<P<T>::value>> F(T) {} }; template<class> struct C { C(F = []{}) {} }; auto f() { struct T {} t; return t; } template<class T> decltype(T()) g() { return T(); } int main() { g<C<decltype(f)>>(); } ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/111602] [11/12/13/14 Regression] "Error: symbol is already defined" for variable template dependent on default argument lambda of class dependent on local type used in sfinae and non-sfinae contexts 2023-09-26 17:15 [Bug c++/111602] New: "Error: symbol is already defined" for variable template dependent on default argument lambda used in sfinae and non-sfinae ed at catmur dot uk ` (2 preceding siblings ...) 2023-09-26 19:33 ` ed at catmur dot uk @ 2023-10-25 20:15 ` ppalka at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: ppalka at gcc dot gnu.org @ 2023-10-25 20:15 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111602 Patrick Palka <ppalka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ppalka at gcc dot gnu.org --- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> --- Started with r8-2720-gf44a8dd56f5bfb FWIW ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-10-25 20:15 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-09-26 17:15 [Bug c++/111602] New: "Error: symbol is already defined" for variable template dependent on default argument lambda used in sfinae and non-sfinae ed at catmur dot uk 2023-09-26 17:22 ` [Bug c++/111602] "Error: symbol is already defined" for variable template dependent on default argument lambda of class dependent on local type used in sfinae and non-sfinae contexts pinskia at gcc dot gnu.org 2023-09-26 17:23 ` [Bug c++/111602] [11/12/13/14 Regression] " pinskia at gcc dot gnu.org 2023-09-26 19:33 ` ed at catmur dot uk 2023-10-25 20:15 ` ppalka at gcc dot gnu.org
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).