https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67084

            Bug ID: 67084
           Summary: [c++-concepts] Matching of variable template
                    declarations ignores constraints
           Product: gcc
           Version: c++-concepts
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: Casey at Carter dot net
  Target Milestone: ---

Created attachment 36102
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36102&action=edit
Test case

The two declarations of p<T> should be distinct due to having different
constraints:

template <class T>
constexpr bool p = true;

template <class T>
  requires true
constexpr bool p<T> = false;

template <class T>
  requires true && false
constexpr bool p<T> = true;

Compiling this program with r226419 results in:

~/concept-gcc/bin/g++ -std=gnu++1z foo.cpp -c
foo.cpp:10:16: error: redefinition of ‘const bool p<T>’
 constexpr bool p<T> = true;
                ^
foo.cpp:6:16: note: ‘constexpr const bool p<T>’ previously declared here
 constexpr bool p<T> = false;
                ^
foo.cpp:10:16: internal compiler error: in set_constraints, at cp/pt.c:23421
 constexpr bool p<T> = true;
                ^
0x63ae8d set_constraints(tree_node*, tree_node*)
        ../../gcc/cp/pt.c:23421
0x673e91 process_partial_specialization
        ../../gcc/cp/pt.c:4728
0x675467 push_template_decl_real(tree_node*, bool)
        ../../gcc/cp/pt.c:5250
0x6214c4 start_decl(cp_declarator const*, cp_decl_specifier_seq*, int,
tree_node*, tree_node*, tree_node**)
        ../../gcc/cp/decl.c:4919
0x710720 cp_parser_init_declarator
        ../../gcc/cp/parser.c:17728
0x7113c4 cp_parser_single_declaration
        ../../gcc/cp/parser.c:24892
0x71155b cp_parser_template_declaration_after_parameters
        ../../gcc/cp/parser.c:24509
0x712104 cp_parser_explicit_template_declaration
        ../../gcc/cp/parser.c:24744
0x712104 cp_parser_template_declaration_after_export
        ../../gcc/cp/parser.c:24762
0x718aa9 cp_parser_declaration
        ../../gcc/cp/parser.c:11416
0x7170fa cp_parser_declaration_seq_opt
        ../../gcc/cp/parser.c:11338
0x717411 cp_parser_translation_unit
        ../../gcc/cp/parser.c:4153
0x717411 c_parse_file()
        ../../gcc/cp/parser.c:34295
0x85ea22 c_common_parse_file()
        ../../gcc/c-family/c-opts.c:1059
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.

An equivalent program with class templates or function templates overloaded
similarly does compile correctly.

Reply via email to