balazske wrote:

A test is needed to make the change acceptable but I could not find an easy 
case to provoke the situation. The problem looks to be related to his code:
```c++
using size_t = int;
template<typename... _Types> class tuple;

template<class T, T v>
struct integral_constant
{
    static constexpr T value = v;
    using value_type = T;
    using type = integral_constant; // using injected-class-name
    constexpr operator value_type() const noexcept { return value; }
    constexpr value_type operator()() const noexcept { return value; } // since 
c++14
};

using true_type = integral_constant<bool, true>;
using false_type = integral_constant<bool, false>;

template<class T, class U>
struct is_same : false_type {};
 
template<class T>
struct is_same<T, T> : true_type {};

template< class T, class U >
inline constexpr bool is_same_v = is_same<T, U>::value;

namespace A {
  template<typename _Tp, typename _Tuple>
  struct __tuple_count;

  template<typename _Tp, typename _Tuple>
    inline constexpr size_t __tuple_count_v =
      __tuple_count<_Tp, _Tuple>::value;

  template<typename _Tp, typename... _Types>
    struct __tuple_count<_Tp, tuple<_Types...>>
    : integral_constant<size_t, 0> { };

  template<typename _Tp, typename _First, typename... _Rest>
    struct __tuple_count<_Tp, tuple<_First, _Rest...>>
    : integral_constant<
        size_t,
        __tuple_count_v<_Tp, tuple<_Rest...>> + is_same_v<_Tp, _First>> { };
};


size_t x = A::__tuple_count_v<int, tuple<bool, int, float>>;
```


https://github.com/llvm/llvm-project/pull/89887
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to