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

Daniel Krügler <daniel.kruegler at googlemail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |daniel.kruegler@googlemail.
                   |                            |com

--- Comment #3 from Daniel Krügler <daniel.kruegler at googlemail dot com> ---
Removing libraries dependencies leads to:

//--------------
template <typename, typename>
struct is_same 
{ 
  enum { value = false }; 
  constexpr bool operator()() const noexcept { return value; }
};

template <typename T>
struct is_same<T, T> 
{ 
  enum { value = true }; 
  constexpr bool operator()() const noexcept { return value; }
};

template <bool, typename = void>
struct enable_if { };

template <typename T>
struct enable_if<true, T> { typedef T type; };

template <bool V, typename T = void>
using enable_if_t = typename enable_if<V, T>::type;

struct T;

template <typename, typename = void>
struct F { };

template <typename X>
struct F<X, enable_if_t<is_same<X, T>{}()>> {
    template <typename MakeDependent>
    F(MakeDependent) {
        auto ICE_HERE = __func__;
        (void)ICE_HERE; // avoid -Wunused-variable
    }
};

int main() {
    F<T>{1};
}
//--------------

If we remove remove the enable_if_t alias we get to:

//--------------
template <typename, typename>
struct is_same 
{ 
  enum { value = false }; 
  constexpr bool operator()() const noexcept { return value; }
};

template <typename T>
struct is_same<T, T> 
{ 
  enum { value = true }; 
  constexpr bool operator()() const noexcept { return value; }
};

template <bool, typename = void>
struct enable_if { };

template <typename T>
struct enable_if<true, T> { typedef T type; };

struct T;

template <typename, typename = void>
struct F { };

template <typename X>
struct F<X, typename enable_if<is_same<X, T>{}()>::type> {
    template <typename MakeDependent>
    F(MakeDependent) {
        auto ICE_HERE = __func__;
        (void)ICE_HERE; // avoid -Wunused-variable
    }
};

int main() {
    F<T>{1};
}
//--------------

This still leads to an ICE, but with different diagnostics using GCC 5.0.0
20150320 (experimental):

>>>>>>>>>>>
nternal compiler error: Error reporting routines re-entered.
0x6fedc5 cxx_eval_call_expression
    /home/heads/gcc/gcc-source/gcc/cp/constexpr.c:1358
0x6f9beb cxx_eval_constant_expression
    /home/heads/gcc/gcc-source/gcc/cp/constexpr.c:3021
0x6fc330 cxx_eval_outermost_constant_expr
    /home/heads/gcc/gcc-source/gcc/cp/constexpr.c:3529
0x6283b0 convert_nontype_argument
    /home/heads/gcc/gcc-source/gcc/cp/pt.c:5843
0x6283b0 convert_template_argument
    /home/heads/gcc/gcc-source/gcc/cp/pt.c:6744
0x628f32 coerce_template_parms
    /home/heads/gcc/gcc-source/gcc/cp/pt.c:7171
0x629ea8 lookup_template_class_1
    /home/heads/gcc/gcc-source/gcc/cp/pt.c:7780
0x629ea8 lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int, int)
    /home/heads/gcc/gcc-source/gcc/cp/pt.c:8096
0x62b12c tsubst_aggr_type
    /home/heads/gcc/gcc-source/gcc/cp/pt.c:10460
0x623ce9 tsubst(tree_node*, tree_node*, int, tree_node*)
    /home/heads/gcc/gcc-source/gcc/cp/pt.c:12418
0x655bd0 dump_template_bindings
    /home/heads/gcc/gcc-source/gcc/cp/error.c:369
0x655bd0 dump_substitution
    /home/heads/gcc/gcc-source/gcc/cp/error.c:1448
0x6570fe decl_as_string_translate(tree_node*, int)
    /home/heads/gcc/gcc-source/gcc/cp/error.c:2821
0x6c1f35 cxx_printable_name_internal
    /home/heads/gcc/gcc-source/gcc/cp/tree.c:2028
0x656cb2 cp_print_error_function
    /home/heads/gcc/gcc-source/gcc/cp/error.c:3154
0x656cb2 cp_diagnostic_starter
    /home/heads/gcc/gcc-source/gcc/cp/error.c:3108
0x102b889 diagnostic_report_diagnostic(diagnostic_context*, diagnostic_info*)
    /home/heads/gcc/gcc-source/gcc/diagnostic.c:866
0x102c8a2 internal_error(char const*, ...)
    /home/heads/gcc/gcc-source/gcc/diagnostic.c:1223
0x102b1e3 fancy_abort(char const*, int, char const*)
    /home/heads/gcc/gcc-source/gcc/diagnostic.c:1291
0x6fedc5 cxx_eval_call_expression
    /home/heads/gcc/gcc-source/gcc/cp/constexpr.c:1358
<<<<<<<<<<<

Reply via email to