microsoft / microsoft/STL

`P2278R4_views_as_const`: Clang 22 emits error: satisfaction of constraint '`__is_constructible(_Ty, _ArgTys...)`' depends on itself

Open
#6,295 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

compiler ranges
Dominant language
C++
Stars
11.1k
Forks
1.7k
Avg merge
4d 15h
Merged PRs (30d)
22

Description

Accepted by MSVC and Clang 20, rejected by Clang 22, I don't know why yet:

https://github.com/microsoft/STL/blob/f3ae96af460b8fcb7d77c46fc1ad7d312900d1e7/tests/std/tests/P2278R4_views_as_const/test.cpp#L48

D:\GitHub\STL\out\x64>clang-cl -v
clang version 22.1.3 (https://github.com/llvm/llvm-project e9846648fd6183ee6d8cbdb4502213fcf902a211)
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\Llvm\x64\bin

D:\GitHub\STL\out\x64>clang-cl /EHsc /nologo /W4 /std:c++latest -Wno-unqualified-std-cast-call ..\..\tests\std\tests\P2278R4_views_as_const\test.cpp /I ..\..\tests\std\include
In file included from ..\..\tests\std\tests\P2278R4_views_as_const\test.cpp:4:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\algorithm:10:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\__msvc_heap_algorithms.hpp:11:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility:11:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\__msvc_iter_core.hpp:10:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\utility:15:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\compare:14:
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(91,51): error:
      satisfaction of constraint '__is_constructible(_Ty, _ArgTys...)' depends on itself
   91 | concept constructible_from = destructible<_Ty> && __is_constructible(_Ty, _ArgTys...);
      |                                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(100,30): note: while
      checking the satisfaction of concept 'constructible_from<std::ranges::as_const_view<std::span<const int>>>'
      requested here
  100 | concept move_constructible = constructible_from<_Ty, _Ty> && convertible_to<_Ty, _Ty>;
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(231,39): note: while
      checking the satisfaction of concept 'move_constructible<std::ranges::as_const_view<std::span<const int>>>'
      requested here
  231 | concept movable = is_object_v<_Ty> && move_constructible<_Ty> && assignable_from<_Ty&, _Ty> && swappable<_Ty>;
      |                                       ^~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3590,34): note: while
      checking the satisfaction of concept 'movable<std::ranges::as_const_view<std::span<const int>>>' requested here
 3590 |     concept view = range<_Ty> && movable<_Ty> && enable_view<_Ty>;
      |                                  ^~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3906,27): note: while
      checking the satisfaction of concept 'view<std::ranges::as_const_view<std::span<const int>>>' requested here
 3906 |             static_assert(view<_Derived>,
      |                           ^~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3984,50): note: in
      instantiation of member function 'std::ranges::view_interface<std::ranges::as_const_view<std::span<const
      int>>>::_Cast' requested here
 3984 |             return _STD to_address(_RANGES begin(_Cast()));
      |                                                  ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3494,40): note:
      (skipping 16 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
 3494 |             { _STD _Fake_copy_init(__t.data()) } -> _Points_to_object;
      |                                        ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(100,30): note: while
      checking the satisfaction of concept 'constructible_from<R>' requested here
  100 | concept move_constructible = constructible_from<_Ty, _Ty> && convertible_to<_Ty, _Ty>;
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(231,39): note: while
      checking the satisfaction of concept 'move_constructible<R>' requested here
  231 | concept movable = is_object_v<_Ty> && move_constructible<_Ty> && assignable_from<_Ty&, _Ty> && swappable<_Ty>;
      |                                       ^~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3590,34): note: while
      checking the satisfaction of concept 'movable<R>' requested here
 3590 |     concept view = range<_Ty> && movable<_Ty> && enable_view<_Ty>;
      |                                  ^~~~~~~~~~~~
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(48,19): note: while checking the satisfaction of concept 'view<R>'
      requested here
   48 |     static_assert(ranges::view<R>);
      |                   ^~~~~~~~~~~~~~~
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(635,23): note: in instantiation of function template
      specialization 'test_one<const std::span<const int> &, const int (&)[6]>' requested here
  635 |         static_assert(test_one(s, some_ints));
      |                       ^
Click to expand more errors:
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(48,19): error: static assertion failed
   48 |     static_assert(ranges::view<R>);
      |                   ^~~~~~~~~~~~~~~
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(635,23): note: in instantiation of function template
      specialization 'test_one<const std::span<const int> &, const int (&)[6]>' requested here
  635 |         static_assert(test_one(s, some_ints));
      |                       ^
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(48,19): note: because 'R' (aka 'as_const_view<std::span<const int,
      18446744073709551615>>') does not satisfy 'view'
   48 |     static_assert(ranges::view<R>);
      |                   ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3590,34): note: because
      'R' (aka 'as_const_view<std::span<const int, 18446744073709551615>>') does not satisfy 'movable'
 3590 |     concept view = range<_Ty> && movable<_Ty> && enable_view<_Ty>;
      |                                  ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(231,96): note: because
      'std::ranges::as_const_view<std::span<const int>>' does not satisfy 'swappable'
  231 | concept movable = is_object_v<_Ty> && move_constructible<_Ty> && assignable_from<_Ty&, _Ty> && swappable<_Ty>;
      |                                                                                                ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(159,52): note: because
      '::std::ranges::swap(__x, __y)' would be invalid: no matching function for call to object of type
      'const _Swap::_Cpo'
  159 | concept swappable = requires(_Ty& __x, _Ty& __y) { _RANGES swap(__x, __y); };
      |                                                    ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\yvals_core.h(1908,17): note:
      expanded from macro '_RANGES'
 1908 | #define _RANGES ::std::ranges::
      |                 ^
In file included from ..\..\tests\std\tests\P2278R4_views_as_const\test.cpp:4:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\algorithm:10:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\__msvc_heap_algorithms.hpp:11:
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3915,27): error: static
      assertion failed: view_interface's template argument must model the view concept
      (N4950 [view.interface.general]/2).
 3915 |             static_assert(view<_Derived>,
      |                           ^~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3924,27): note: in
      instantiation of member function 'std::ranges::view_interface<std::ranges::as_const_view<std::span<const
      int>>>::_Cast' requested here
 3924 |             auto& _Self = _Cast();
      |                           ^
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(322,18): note: in instantiation of member function
      'std::ranges::view_interface<std::ranges::as_const_view<std::span<const int>>>::empty' requested here
  322 |         assert(r.empty() == is_empty);
      |                  ^
C:\Program Files (x86)\Windows Kits\10\include\10.0.28000.0\ucrt\assert.h(40,17): note: expanded from macro 'assert'
   40 |             (!!(expression)) ||                                                               \
      |                 ^
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(635,23): note: in instantiation of function template
      specialization 'test_one<const std::span<const int> &, const int (&)[6]>' requested here
  635 |         static_assert(test_one(s, some_ints));
      |                       ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3915,27): note: because
      'R' (aka 'as_const_view<std::span<const int, 18446744073709551615>>') does not satisfy 'view'
 3915 |             static_assert(view<_Derived>,
      |                           ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3590,34): note: because
      'R' (aka 'as_const_view<std::span<const int, 18446744073709551615>>') does not satisfy 'movable'
 3590 |     concept view = range<_Ty> && movable<_Ty> && enable_view<_Ty>;
      |                                  ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(231,96): note: because
      'std::ranges::as_const_view<std::span<const int>>' does not satisfy 'swappable'
  231 | concept movable = is_object_v<_Ty> && move_constructible<_Ty> && assignable_from<_Ty&, _Ty> && swappable<_Ty>;
      |                                                                                                ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(159,52): note: because
      '::std::ranges::swap(__x, __y)' would be invalid: no matching function for call to object of type
      'const _Swap::_Cpo'
  159 | concept swappable = requires(_Ty& __x, _Ty& __y) { _RANGES swap(__x, __y); };
      |                                                    ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\yvals_core.h(1908,17): note:
      expanded from macro '_RANGES'
 1908 | #define _RANGES ::std::ranges::
      |                 ^
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(635,23): error: static assertion expression is not an integral
      constant expression
  635 |         static_assert(test_one(s, some_ints));
      |                       ^~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3984,50): note:
      subexpression not valid in a constant expression
 3984 |             return _STD to_address(_RANGES begin(_Cast()));
      |                                                  ^
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(504,91): note: in call to 'r.data()'
  504 |         const same_as<const remove_reference_t<ranges::range_reference_t<V>>*> auto ptr = r.data();
      |                                                                                           ^~~~~~~~
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(635,23): note: in call to 'test_one<const std::span<const int> &,
      const int (&)[6]>(s, some_ints)'
  635 |         static_assert(test_one(s, some_ints));
      |                       ^~~~~~~~~~~~~~~~~~~~~~
In file included from ..\..\tests\std\tests\P2278R4_views_as_const\test.cpp:4:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\algorithm:10:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\__msvc_heap_algorithms.hpp:11:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility:11:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\__msvc_iter_core.hpp:10:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\utility:15:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\compare:14:
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(91,51): error:
      satisfaction of constraint '__is_constructible(_Ty, _ArgTys...)' depends on itself
   91 | concept constructible_from = destructible<_Ty> && __is_constructible(_Ty, _ArgTys...);
      |                                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(100,30): note: while
      checking the satisfaction of concept 'constructible_from<std::ranges::as_const_view<std::span<int>>>' requested
      here
  100 | concept move_constructible = constructible_from<_Ty, _Ty> && convertible_to<_Ty, _Ty>;
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(231,39): note: while
      checking the satisfaction of concept 'move_constructible<std::ranges::as_const_view<std::span<int>>>' requested
      here
  231 | concept movable = is_object_v<_Ty> && move_constructible<_Ty> && assignable_from<_Ty&, _Ty> && swappable<_Ty>;
      |                                       ^~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3590,34): note: while
      checking the satisfaction of concept 'movable<std::ranges::as_const_view<std::span<int>>>' requested here
 3590 |     concept view = range<_Ty> && movable<_Ty> && enable_view<_Ty>;
      |                                  ^~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3906,27): note: while
      checking the satisfaction of concept 'view<std::ranges::as_const_view<std::span<int>>>' requested here
 3906 |             static_assert(view<_Derived>,
      |                           ^~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3984,50): note: in
      instantiation of member function 'std::ranges::view_interface<std::ranges::as_const_view<std::span<int>>>::_Cast'
      requested here
 3984 |             return _STD to_address(_RANGES begin(_Cast()));
      |                                                  ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3494,40): note:
      (skipping 16 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
 3494 |             { _STD _Fake_copy_init(__t.data()) } -> _Points_to_object;
      |                                        ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(100,30): note: while
      checking the satisfaction of concept 'constructible_from<R>' requested here
  100 | concept move_constructible = constructible_from<_Ty, _Ty> && convertible_to<_Ty, _Ty>;
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(231,39): note: while
      checking the satisfaction of concept 'move_constructible<R>' requested here
  231 | concept movable = is_object_v<_Ty> && move_constructible<_Ty> && assignable_from<_Ty&, _Ty> && swappable<_Ty>;
      |                                       ^~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3590,34): note: while
      checking the satisfaction of concept 'movable<R>' requested here
 3590 |     concept view = range<_Ty> && movable<_Ty> && enable_view<_Ty>;
      |                                  ^~~~~~~~~~~~
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(48,19): note: while checking the satisfaction of concept 'view<R>'
      requested here
   48 |     static_assert(ranges::view<R>);
      |                   ^~~~~~~~~~~~~~~
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(700,23): note: in instantiation of function template
      specialization 'test_one<std::span<int>, std::span<int>>' requested here
  700 |         static_assert(test_one(Span{}, Span{}));
      |                       ^
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(48,19): error: static assertion failed
   48 |     static_assert(ranges::view<R>);
      |                   ^~~~~~~~~~~~~~~
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(700,23): note: in instantiation of function template
      specialization 'test_one<std::span<int>, std::span<int>>' requested here
  700 |         static_assert(test_one(Span{}, Span{}));
      |                       ^
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(48,19): note: because 'R' (aka 'as_const_view<std::span<int,
      18446744073709551615>>') does not satisfy 'view'
   48 |     static_assert(ranges::view<R>);
      |                   ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3590,34): note: because
      'R' (aka 'as_const_view<std::span<int, 18446744073709551615>>') does not satisfy 'movable'
 3590 |     concept view = range<_Ty> && movable<_Ty> && enable_view<_Ty>;
      |                                  ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(231,96): note: because
      'std::ranges::as_const_view<std::span<int>>' does not satisfy 'swappable'
  231 | concept movable = is_object_v<_Ty> && move_constructible<_Ty> && assignable_from<_Ty&, _Ty> && swappable<_Ty>;
      |                                                                                                ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(159,52): note: because
      '::std::ranges::swap(__x, __y)' would be invalid: no matching function for call to object of type
      'const _Swap::_Cpo'
  159 | concept swappable = requires(_Ty& __x, _Ty& __y) { _RANGES swap(__x, __y); };
      |                                                    ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\yvals_core.h(1908,17): note:
      expanded from macro '_RANGES'
 1908 | #define _RANGES ::std::ranges::
      |                 ^
In file included from ..\..\tests\std\tests\P2278R4_views_as_const\test.cpp:4:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\algorithm:10:
In file included from C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\__msvc_heap_algorithms.hpp:11:
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3915,27): error: static
      assertion failed: view_interface's template argument must model the view concept
      (N4950 [view.interface.general]/2).
 3915 |             static_assert(view<_Derived>,
      |                           ^~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3924,27): note: in
      instantiation of member function 'std::ranges::view_interface<std::ranges::as_const_view<std::span<int>>>::_Cast'
      requested here
 3924 |             auto& _Self = _Cast();
      |                           ^
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(322,18): note: in instantiation of member function
      'std::ranges::view_interface<std::ranges::as_const_view<std::span<int>>>::empty' requested here
  322 |         assert(r.empty() == is_empty);
      |                  ^
C:\Program Files (x86)\Windows Kits\10\include\10.0.28000.0\ucrt\assert.h(40,17): note: expanded from macro 'assert'
   40 |             (!!(expression)) ||                                                               \
      |                 ^
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(700,23): note: in instantiation of function template
      specialization 'test_one<std::span<int>, std::span<int>>' requested here
  700 |         static_assert(test_one(Span{}, Span{}));
      |                       ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3915,27): note: because
      'R' (aka 'as_const_view<std::span<int, 18446744073709551615>>') does not satisfy 'view'
 3915 |             static_assert(view<_Derived>,
      |                           ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3590,34): note: because
      'R' (aka 'as_const_view<std::span<int, 18446744073709551615>>') does not satisfy 'movable'
 3590 |     concept view = range<_Ty> && movable<_Ty> && enable_view<_Ty>;
      |                                  ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(231,96): note: because
      'std::ranges::as_const_view<std::span<int>>' does not satisfy 'swappable'
  231 | concept movable = is_object_v<_Ty> && move_constructible<_Ty> && assignable_from<_Ty&, _Ty> && swappable<_Ty>;
      |                                                                                                ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\concepts(159,52): note: because
      '::std::ranges::swap(__x, __y)' would be invalid: no matching function for call to object of type
      'const _Swap::_Cpo'
  159 | concept swappable = requires(_Ty& __x, _Ty& __y) { _RANGES swap(__x, __y); };
      |                                                    ^
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\yvals_core.h(1908,17): note:
      expanded from macro '_RANGES'
 1908 | #define _RANGES ::std::ranges::
      |                 ^
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(700,23): error: static assertion expression is not an integral
      constant expression
  700 |         static_assert(test_one(Span{}, Span{}));
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.52.36405\include\xutility(3984,50): note:
      subexpression not valid in a constant expression
 3984 |             return _STD to_address(_RANGES begin(_Cast()));
      |                                                  ^
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(504,91): note: in call to 'r.data()'
  504 |         const same_as<const remove_reference_t<ranges::range_reference_t<V>>*> auto ptr = r.data();
      |                                                                                           ^~~~~~~~
..\..\tests\std\tests\P2278R4_views_as_const\test.cpp(700,23): note: in call to 'test_one<std::span<int>,
      std::span<int>>(Span{}, Span{})'
  700 |         static_assert(test_one(Span{}, Span{}));
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~
8 errors generated.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure with the clang-cl command against tests/std/tests/P2278R4_views_as_const/test.cpp, starting at line 48 and the instantiation near line 635. Inspect the reported concepts and xutility paths to determine why as_const_view is not recognized as movable by Clang 22. Done means this test passes with Clang 22 without regressing the existing MSVC and Clang 20 behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
50/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.