0

Experimenting with boost::hana (version 1.1.0), and compiling with g++ 6.2.0, I get a compiler error with that sample:

#include <boost/hana.hpp>
#include <iostream>
#include <type_traits>

struct my_tag {};

namespace boost {
    namespace hana {

        template<class T>
        struct tag_of<T, when<std::is_same<T, int>{}> >
        {
            using type = my_tag;
        };

    }
}

int main()
{
    std::cout << std::is_same<my_tag, 
                              boost::hana::tag_of<int>::type>::value
              << std::endl;
}

And the compiler generates an internal error:

In file included from /usr/local/include/boost/hana/concept/struct.hpp:18:0,
                 from /usr/local/include/boost/hana/accessors.hpp:15,
                 from /usr/local/include/boost/hana.hpp:58,
                 from main.cpp:1:
/usr/local/include/boost/hana/core/tag_of.hpp: In instantiation of ‘struct boost::hana::tag_of<int>’:
main.cpp:21:63:   required from here
/usr/local/include/boost/hana/core/tag_of.hpp:22:12: internal compiler error: in unify, at cp/pt.c:20188
     struct tag_of : tag_of<T, when<true>> { };
            ^~~~~~
0x61cda8 unify
    ../../src/gcc/cp/pt.c:20188
0x61d094 unify
    ../../src/gcc/cp/pt.c:19980
0x61cadf unify
    ../../src/gcc/cp/pt.c:20059
0x61d094 unify
    ../../src/gcc/cp/pt.c:19980
0x61de46 get_partial_spec_bindings
    ../../src/gcc/cp/pt.c:20749
0x61a69c most_specialized_partial_spec
    ../../src/gcc/cp/pt.c:21021
0x625123 instantiate_class_template_1
    ../../src/gcc/cp/pt.c:9812
0x625123 instantiate_class_template(tree_node*)
    ../../src/gcc/cp/pt.c:10377
0x686c8d complete_type(tree_node*)
    ../../src/gcc/cp/typeck.c:131
0x686d2f complete_type_or_maybe_complain(tree_node*, tree_node*, int)
    ../../src/gcc/cp/typeck.c:143
0x5ef539 xref_basetypes(tree_node*, tree_node*)
    ../../src/gcc/cp/decl.c:12933
0x6253f5 instantiate_class_template_1
    ../../src/gcc/cp/pt.c:9966
0x6253f5 instantiate_class_template(tree_node*)
    ../../src/gcc/cp/pt.c:10377
0x686c8d complete_type(tree_node*)
    ../../src/gcc/cp/typeck.c:131
0x665463 cp_parser_nested_name_specifier_opt
    ../../src/gcc/cp/parser.c:6104
0x663401 cp_parser_simple_type_specifier
    ../../src/gcc/cp/parser.c:16255
0x65fcad cp_parser_type_specifier
    ../../src/gcc/cp/parser.c:15936
0x661f52 cp_parser_type_specifier_seq
    ../../src/gcc/cp/parser.c:20059
0x66a662 cp_parser_type_id_1
    ../../src/gcc/cp/parser.c:19921
0x66a77e cp_parser_template_type_arg
    ../../src/gcc/cp/parser.c:19980
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-6/README.Bugs> for instructions.

Is that a gcc bug? Can anybody try to replicate this error?

4

0 回答 0