Closed dutiona closed 5 years ago
I can't reproduce this (https://godbolt.org/z/L-LhyR). I assume the actual repro is larger, since you suggest that modification of transform.hpp
makes the problem go away despite that the repro code doesn't touch transform.hpp
.
Hello, I forgot to mention that I'm using the head version of the master branch. I'm not using a tagged version as I need the fix for https://github.com/ericniebler/range-v3/issues/996 . I'm actually trying to migrate and encountered this regresion. I can confirm that with the tagged 0.4.0 version packaged with conan (range-v3/0.4.0@ericniebler/stable) there is no bug.
And yes I narrowed the repro code above (min/max) which is called by transform2 when I perform a to_vector on a transformed2_view.
Hello again,
I've made a step-by-step deterministic way to reproduce the bug inside a docker image:
docker pull debian:testing
docker run -it debian:testing
apt update
apt upgrade -y
apt install -y build-essential gcc g++ gcc-8 g++-8 cmake git googletest ninja-build vim
cd /tmp
mkdir repro
cd repro
git clone https://github.com/ericniebler/range-v3.git
touch CMakeLists.txt
cat CMakeLists.txt
<<<
cmake_minimum_required(VERSION 3.8.2)
project(repro CXX)
add_library(repro INTERFACE)
target_compile_features(repro INTERFACE cxx_std_17)
target_compile_options(repro INTERFACE -fconcepts)
target_include_directories(repro INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/range-v3/include/)
# https://github.com/ericniebler/range-v3/issues/1076
add_executable(repro_1076 repro_1076.cpp)
target_link_libraries(repro_1076 PRIVATE repro)
>>>
touch repro_1076.cpp
cat repro_1076.cpp
<<<
#include <meta/meta.hpp>
#include <range/v3/all.hpp>
#include <iostream>
void g() {
long unsigned int a = 0, b = 1;
auto c = ranges::min(a, b);
auto d = ranges::max(a, b);
}
int main()
{
std::cout << "Hello world!\n";
}
>>>
mkdir build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug ..
cmake --build . --target repro_1076
The error message output is:
[1/2] Building CXX object CMakeFiles/repro_1076.dir/repro_1076.cpp.o
FAILED: CMakeFiles/repro_1076.dir/repro_1076.cpp.o
/usr/bin/c++ -I../range-v3/include -g -fconcepts -std=gnu++17 -MD -MT CMakeFiles/repro_1076.dir/repro_1076.cpp.o -MF CMakeFiles/repro_1076.dir/repro_1076.cpp.o.d -o CMakeFiles/repro_1076.dir/repro_1076.cpp.o -c ../repro_1076.cpp
../repro_1076.cpp: In function 'void g()':
../repro_1076.cpp:8:28: error: no match for call to '(const ranges::v3::with_braced_init_args<ranges::v3::min_fn>) (long unsigned int&, long unsigned int&)'
auto c = ranges::min(a, b);
^
In file included from ../range-v3/include/range/v3/utility/iterator_concepts.hpp:23,
from ../range-v3/include/range/v3/begin_end.hpp:26,
from ../range-v3/include/range/v3/core.hpp:17,
from ../range-v3/include/range/v3/all.hpp:17,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/utility/functional.hpp:887:18: note: candidate: 'template<class V0, class ... Args> constexpr decltype (declval<const ImplFn&>()(std::move(rng0), (declval<Args>)()...)) ranges::v3::with_braced_init_args<ImplFn>::operator()(std::initializer_list<_Up>&&, Args&& ...) const [with V0 = V0; Args = {Args ...}; ImplFn = ranges::v3::min_fn]'
auto operator()(std::initializer_list<V0> &&rng0, Args &&...args) const ->
^~~~~~~~
../range-v3/include/range/v3/utility/functional.hpp:887:18: note: template argument deduction/substitution failed:
../repro_1076.cpp:8:28: note: mismatched types 'std::initializer_list<_Tp>' and 'long unsigned int'
auto c = ranges::min(a, b);
^
In file included from ../range-v3/include/range/v3/utility/iterator_concepts.hpp:23,
from ../range-v3/include/range/v3/begin_end.hpp:26,
from ../range-v3/include/range/v3/core.hpp:17,
from ../range-v3/include/range/v3/all.hpp:17,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/utility/functional.hpp:895:18: note: candidate: 'template<class Rng0, class V1, class ... Args> constexpr decltype (declval<const ImplFn&>()(declval<Rng0>(), std::move(rng1), (declval<Args>)()...)) ranges::v3::with_braced_init_args<ImplFn>::operator()(Rng0&&, std::initializer_list<V1>&&, Args&& ...) const [with Rng0 = Rng0; V1 = V1; Args = {Args ...}; ImplFn = ranges::v3::min_fn]'
auto operator()(Rng0 && rng0, std::initializer_list<V1> &&rng1, Args &&...args) const ->
^~~~~~~~
../range-v3/include/range/v3/utility/functional.hpp:895:18: note: template argument deduction/substitution failed:
../repro_1076.cpp:8:28: note: mismatched types 'std::initializer_list<_Up>' and 'long unsigned int'
auto c = ranges::min(a, b);
^
In file included from ../range-v3/include/range/v3/utility/iterator_concepts.hpp:23,
from ../range-v3/include/range/v3/begin_end.hpp:26,
from ../range-v3/include/range/v3/core.hpp:17,
from ../range-v3/include/range/v3/all.hpp:17,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/utility/functional.hpp:903:18: note: candidate: 'template<class V0, class V1, class ... Args> constexpr decltype (declval<const ImplFn&>()(std::move(rng0), std::move(rng1), (declval<Args>)()...)) ranges::v3::with_braced_init_args<ImplFn>::operator()(std::initializer_list<_Up>, std::initializer_list<V1>&&, Args&& ...) const [with V0 = V0; V1 = V1; Args = {Args ...}; ImplFn = ranges::v3::min_fn]'
auto operator()(std::initializer_list<V0> rng0, std::initializer_list<V1> &&rng1, Args &&...args) const ->
^~~~~~~~
../range-v3/include/range/v3/utility/functional.hpp:903:18: note: template argument deduction/substitution failed:
../repro_1076.cpp:8:28: note: mismatched types 'std::initializer_list<_Tp>' and 'long unsigned int'
auto c = ranges::min(a, b);
^
In file included from ../range-v3/include/range/v3/algorithm/inplace_merge.hpp:41,
from ../range-v3/include/range/v3/algorithm.hpp:45,
from ../range-v3/include/range/v3/all.hpp:18,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/algorithm/min.hpp:57:32: note: candidate: 'template<class T, class C, class P, bool _concept_requires_56, typename std::enable_if<(_concept_requires_56 || typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, const T*>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<const T*, P> >::type>::type::value, typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, const T*>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<const T*, P> >::type>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Relation>, C&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, const T*>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<const T*, P> >::type, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, const T*>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<const T*, P> >::type> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, Proj> >::type())>::type* <anonymous> > constexpr const T& ranges::v3::min_fn::operator()(const T&, const T&, C, P) const'
constexpr T const &operator()(T const &a, T const &b, C pred = C{}, P proj = P{}) const
^~~~~~~~
../range-v3/include/range/v3/algorithm/min.hpp:57:32: note: template argument deduction/substitution failed:
In file included from ../range-v3/include/range/v3/utility/copy.hpp:18,
from ../range-v3/include/range/v3/begin_end.hpp:24,
from ../range-v3/include/range/v3/core.hpp:17,
from ../range-v3/include/range/v3/all.hpp:17,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/algorithm/min.hpp:56:21: error: no type named 'type' in 'struct meta::detail::_and_<std::integral_constant<bool, true>, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, ranges::v3::ident&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const long unsigned int*> >'
IndirectRelation<C, projected<const T *, P>>())>
../range-v3/include/range/v3/utility/concepts.hpp:685:58: note: in definition of macro 'CONCEPT_REQUIRES_'
CONCEPT_PP_CAT(_concept_requires_, __LINE__) || (__VA_ARGS__) \
^~~~~~~~~~~
In file included from ../range-v3/include/range/v3/algorithm/inplace_merge.hpp:41,
from ../range-v3/include/range/v3/algorithm.hpp:45,
from ../range-v3/include/range/v3/all.hpp:18,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/algorithm/min.hpp:39:38: note: candidate: 'template<class Rng, class C, class P, class I, class V, bool _concept_requires_38, typename std::enable_if<(_concept_requires_38 || ((ranges::v3::concepts::models<ranges::v3::concepts::InputRange, T>() && ranges::v3::concepts::models<ranges::v3::concepts::Copyable, V>()) && typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, I>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<I, P> >::type>::type::value, typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, I>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<I, P> >::type>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Relation>, C&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, I>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<I, P> >::type, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, I>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<I, P> >::type> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, Proj> >::type()))>::type* <anonymous> > constexpr V ranges::v3::min_fn::operator()(Rng&&, C, P) const'
RANGES_CXX14_CONSTEXPR V operator()(Rng &&rng, C pred = C{}, P proj = P{}) const
^~~~~~~~
../range-v3/include/range/v3/algorithm/min.hpp:39:38: note: template argument deduction/substitution failed:
../repro_1076.cpp:9:28: error: no match for call to '(const ranges::v3::with_braced_init_args<ranges::v3::max_fn>) (long unsigned int&, long unsigned int&)'
auto d = ranges::max(a, b);
^
In file included from ../range-v3/include/range/v3/utility/iterator_concepts.hpp:23,
from ../range-v3/include/range/v3/begin_end.hpp:26,
from ../range-v3/include/range/v3/core.hpp:17,
from ../range-v3/include/range/v3/all.hpp:17,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/utility/functional.hpp:887:18: note: candidate: 'template<class V0, class ... Args> constexpr decltype (declval<const ImplFn&>()(std::move(rng0), (declval<Args>)()...)) ranges::v3::with_braced_init_args<ImplFn>::operator()(std::initializer_list<_Up>&&, Args&& ...) const [with V0 = V0; Args = {Args ...}; ImplFn = ranges::v3::max_fn]'
auto operator()(std::initializer_list<V0> &&rng0, Args &&...args) const ->
^~~~~~~~
../range-v3/include/range/v3/utility/functional.hpp:887:18: note: template argument deduction/substitution failed:
../repro_1076.cpp:9:28: note: mismatched types 'std::initializer_list<_Tp>' and 'long unsigned int'
auto d = ranges::max(a, b);
^
In file included from ../range-v3/include/range/v3/utility/iterator_concepts.hpp:23,
from ../range-v3/include/range/v3/begin_end.hpp:26,
from ../range-v3/include/range/v3/core.hpp:17,
from ../range-v3/include/range/v3/all.hpp:17,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/utility/functional.hpp:895:18: note: candidate: 'template<class Rng0, class V1, class ... Args> constexpr decltype (declval<const ImplFn&>()(declval<Rng0>(), std::move(rng1), (declval<Args>)()...)) ranges::v3::with_braced_init_args<ImplFn>::operator()(Rng0&&, std::initializer_list<V1>&&, Args&& ...) const [with Rng0 = Rng0; V1 = V1; Args = {Args ...}; ImplFn = ranges::v3::max_fn]'
auto operator()(Rng0 && rng0, std::initializer_list<V1> &&rng1, Args &&...args) const ->
^~~~~~~~
../range-v3/include/range/v3/utility/functional.hpp:895:18: note: template argument deduction/substitution failed:
../repro_1076.cpp:9:28: note: mismatched types 'std::initializer_list<_Up>' and 'long unsigned int'
auto d = ranges::max(a, b);
^
In file included from ../range-v3/include/range/v3/utility/iterator_concepts.hpp:23,
from ../range-v3/include/range/v3/begin_end.hpp:26,
from ../range-v3/include/range/v3/core.hpp:17,
from ../range-v3/include/range/v3/all.hpp:17,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/utility/functional.hpp:903:18: note: candidate: 'template<class V0, class V1, class ... Args> constexpr decltype (declval<const ImplFn&>()(std::move(rng0), std::move(rng1), (declval<Args>)()...)) ranges::v3::with_braced_init_args<ImplFn>::operator()(std::initializer_list<_Up>, std::initializer_list<V1>&&, Args&& ...) const [with V0 = V0; V1 = V1; Args = {Args ...}; ImplFn = ranges::v3::max_fn]'
auto operator()(std::initializer_list<V0> rng0, std::initializer_list<V1> &&rng1, Args &&...args) const ->
^~~~~~~~
../range-v3/include/range/v3/utility/functional.hpp:903:18: note: template argument deduction/substitution failed:
../repro_1076.cpp:9:28: note: mismatched types 'std::initializer_list<_Tp>' and 'long unsigned int'
auto d = ranges::max(a, b);
^
In file included from ../range-v3/include/range/v3/algorithm.hpp:51,
from ../range-v3/include/range/v3/all.hpp:18,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/algorithm/max.hpp:57:32: note: candidate: 'template<class T, class C, class P, bool _concept_requires_56, typename std::enable_if<(_concept_requires_56 || typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, const T*>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<const T*, P> >::type>::type::value, typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, const T*>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<const T*, P> >::type>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Relation>, C&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, const T*>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<const T*, P> >::type, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, const T*>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const T*> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<const T*, P> >::type> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, Proj> >::type())>::type* <anonymous> > constexpr const T& ranges::v3::max_fn::operator()(const T&, const T&, C, P) const'
constexpr T const &operator()(T const &a, T const &b, C pred = C{}, P proj = P{}) const
^~~~~~~~
../range-v3/include/range/v3/algorithm/max.hpp:57:32: note: template argument deduction/substitution failed:
In file included from ../range-v3/include/range/v3/utility/copy.hpp:18,
from ../range-v3/include/range/v3/begin_end.hpp:24,
from ../range-v3/include/range/v3/core.hpp:17,
from ../range-v3/include/range/v3/all.hpp:17,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/algorithm/min.hpp:56:21: error: no type named 'type' in 'struct meta::detail::_and_<std::integral_constant<bool, true>, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, ranges::v3::ident&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, const long unsigned int*> >'
IndirectRelation<C, projected<const T *, P>>())>
../range-v3/include/range/v3/utility/concepts.hpp:685:58: note: in definition of macro 'CONCEPT_REQUIRES_'
CONCEPT_PP_CAT(_concept_requires_, __LINE__) || (__VA_ARGS__) \
^~~~~~~~~~~
In file included from ../range-v3/include/range/v3/algorithm.hpp:51,
from ../range-v3/include/range/v3/all.hpp:18,
from ../repro_1076.cpp:2:
../range-v3/include/range/v3/algorithm/max.hpp:39:38: note: candidate: 'template<class Rng, class C, class P, class I, class V, bool _concept_requires_38, typename std::enable_if<(_concept_requires_38 || ((ranges::v3::concepts::models<ranges::v3::concepts::InputRange, T>() && ranges::v3::concepts::models<ranges::v3::concepts::Copyable, V>()) && typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, I>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<I, P> >::type>::type::value, typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, I>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<I, P> >::type>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Relation>, C&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, I>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<I, P> >::type, typename meta::detail::_if_<std::integral_constant<bool, typename meta::detail::_and_<typename meta::detail::_and_<typename meta::detail::_and_<std::integral_constant<bool, and_v<typename ranges::v3::concepts::models<ranges::v3::concepts::Readable, I>::type::value> >, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<meta::strict_and_>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::Invocable>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, meta::defer<meta::invoke, meta::compose_<meta::bind_front<meta::quote<meta::apply>, meta::detail::on_<meta::quote<ranges::v3::CommonReference>, meta::bind_front<meta::quote<meta::apply>, meta::bind_front<meta::quote<ranges::v3::invoke_result_t>, P&> > > >, meta::quote<ranges::v3::detail::iter_args_lists_> >, I> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, P> >::type::value>, ranges::v3::detail::projected_<I, P> >::type> >::type, ranges::v3::concepts::models<ranges::v3::concepts::CopyConstructible, Proj> >::type()))>::type* <anonymous> > constexpr V ranges::v3::max_fn::operator()(Rng&&, C, P) const'
RANGES_CXX14_CONSTEXPR V operator()(Rng &&rng, C pred = C{}, P proj = P{}) const
^~~~~~~~
../range-v3/include/range/v3/algorithm/max.hpp:39:38: note: template argument deduction/substitution failed:
ninja: build stopped: subcommand failed.
Hope this will help investigate.
I narrowed the issue to an incompatibility with the -fconcepts compile option. You can reproduce it on wandbox here: https://wandbox.org/permlink/Z1eprcFWCcAFVBxS
This problem no longer repros for me. Closing.
Hello,
I want to report a bug about the function min and max from the library (from range/v3/algorithm). The function min is used in transform2::size_ (l.313) so it is critical when using this view with two ranges.
The repro codes are:
bug.log.txt
The error I get is joint to the report but the relevant line is:
I noticed that the unit tests for ranges::min/max doesn't cover the use with two arguments.
If, in view/transform.hpp:l313 I replace:
by:
then it works.
Everything compile with clang though (tested with clang 7.0).