[libcxx-commits] [PATCH] D110216: [clang] retain type sugar in auto / template argument deduction

Hans Wennborg via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Wed Nov 17 05:12:24 PST 2021


hans added a comment.

> I am not sure how to reproduce this.

Attaching preprocessed source. With Clang built at 508aa4fe0c82b3b409e2e194d591ee6d665c8623 it reproduces for me like this:

  $ clang++ -c /tmp/a.ii
  ../../base/containers/span_unittest.cc:11:13: error: no viable conversion from 'span<T, [...]>' to 'span<int, [...]>'
    span<int> s = make_span(v);
              ^   ~~~~~~~~~~~~
  ../../base/containers/span.h:340:13: note: candidate constructor not viable: no known conversion from 'span<T, Extent::value>' (aka 'span<const int, Extent::value>') to 'const base::span<int, 18446744073709551615> &' for 1st argument
    constexpr span(const span& other) noexcept = default;
              ^
  ../../base/containers/span.h:303:13: note: candidate template ignored: could not match 'int[N]' against 'span<T, Extent::value>' (aka 'span<const int, Extent::value>')
    constexpr span(T (&array)[N]) noexcept : span(base::data(array), N) {}
              ^
  ../../base/containers/span.h:310:13: note: candidate template ignored: could not match 'array' against 'span'
    constexpr span(std::array<U, N>& array) noexcept
              ^
  ../../base/containers/span.h:317:13: note: candidate template ignored: could not match 'array' against 'span'
    constexpr span(const std::array<U, N>& array) noexcept
              ^
  ../../base/containers/span.h:328:13: note: candidate template ignored: requirement 'conjunction<base::negation<base::internal::IsSpanImpl<base::span<const int, 18446744073709551615>>>, base::negation<base::internal::IsStdArrayImpl<base::span<const int, 18446744073709551615>>>, base::negation<std::is_array<base::span<const int, 18446744073709551615>>>, std::is_convertible<const int (*)[], int (*)[]>, std::is_integral<unsigned long>>::value' was not satisfied [with Container = base::span<const int, 18446744073709551615>]
    constexpr span(Container& container) noexcept{F20424748}
              ^
  ../../base/containers/span.h:337:13: note: candidate template ignored: requirement 'conjunction<base::negation<base::internal::IsSpanImpl<base::span<const int, 18446744073709551615>>>, base::negation<base::internal::IsStdArrayImpl<base::span<const int, 18446744073709551615>>>, base::negation<std::is_array<const base::span<const int, 18446744073709551615>>>, std::is_convertible<const int (*)[], int (*)[]>, std::is_integral<unsigned long>>::value' was not satisfied [with Container = base::span<const int, 18446744073709551615>]
    constexpr span(const Container& container) noexcept
              ^
  ../../base/containers/span.h:350:13: note: candidate template ignored: requirement 'is_convertible<const int (*)[], int (*)[]>::value' was not satisfied [with U = const int, OtherExtent = 18446744073709551615]
    constexpr span(const span<U, OtherExtent>& other)
              ^
  1 error generated.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D110216/new/

https://reviews.llvm.org/D110216



More information about the libcxx-commits mailing list