Der Code:
Code: Alles auswählen
#include <type_traits>
template<typename ...T>
struct type_list {};
template<typename ...T>
struct make_type_list
{
using type = type_list<T...>;
};
// Der Bug tritt nicht auf, wenn make_tuple_type direkt verwendet wird.
template<typename ...T>
using make_type_list_t = typename make_type_list<T...>::type;
struct ContainerEndA {};
template<typename ...Lists>
struct ContainerA
{
using type = make_type_list_t<Lists..., ContainerEndA>;
};
struct ContainerEndB {};
//template<typename Head, typename ...Lists> // Internal compiler error
template<typename ...Lists>
struct ContainerB
{
using type = make_type_list_t<Lists..., ContainerEndB>;
};
int main()
{
// Es spielt keine Rolle mit welchen Typen ContainerA und ContainerB instanziiert werden.
static_assert(
std::is_same<ContainerA<int>::type, ContainerB<int>::type>::value,
"Fails in clang but not in GCC 4.9"
);
}
Ich bin gerade ein bisschen ratlos. Das ist doch ein Bug, oder?
Wer mit dem Code ein wenig herumspielen will, kann dies gleich hier tun.
Gibt es vielleicht bereits einen Bug-Report? (ich weiß gerade nicht einmal, wonach ich genau suchen soll...)
EDIT: Habe den Code leicht vereinfacht und dabei noch eine Möglichkeit gefunden, einen Internal Compiler Error auszulösen.
Viele Grüße
David