Issue 81577
Summary Unexpected behavior in deduction of nested templates with template template parameters (inconsistent with GCC, MSVC)
Labels new issue
Assignees
Reporter 13steinj
    I don't have enough practice with standard-ese to express myself any better than that, unfortunately. Define `EVEN_WORSE` or `ALTERNATIVE_EVEN_WORSE` for a different, but seemingly related, inconsistency. Define `FIXED` to fix the original issue, and "fix" the "even worse" inconsistencies (successful compile, unexpectedly).

I'm happy to provide the motivating example, it's just larger. A whole load of transitional layers from one set of types to another.

<details>
<summary><a href="" Example</href></summary>

```cpp
template<typename>
struct Wrapper;

template<template<typename> typename, typename T>
using ComposedWrapper = Wrapper<T>;

template<typename...>
struct mp_list;

template<typename>
struct converter_impl;

template<typename T>
using converter = converter_impl<T>::type;

template<
#if !defined(EVEN_WORSE)
 template<typename> typename Wrapper,
#endif
    typename T
>
struct converter_impl<mp_list<Wrapper<T>>> {
    using type = void;
};

template<typename T>
struct converter_impl<ComposedWrapper<Wrapper, T>> {
    using type = converter<T>;
};

#if defined(__clang__) && defined(FIXED)

template<typename T>
struct converter_impl<ComposedWrapper<Wrapper, mp_list<T>>> {
    using type = int;
};

#endif

template<typename>
concept valid = true;

static_assert(valid<converter<ComposedWrapper<Wrapper,
#if !defined(ALTERNATIVE_EVEN_WORSE)
    mp_list<
#endif
 mp_list<int>
#if !defined(ALTERNATIVE_EVEN_WORSE)
 >
#endif
>>>);
```

</details>
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to