ericniebler / range-v3

Range library for C++14/17/20, basis for C++20's std::ranges
Other
4.12k stars 440 forks source link

ranges::min/ranges::max compile error on gcc 8.2 #1076

Closed dutiona closed 5 years ago

dutiona commented 5 years ago

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:

long unsigned int a = 0, b = 1;
auto c = ranges::min(a, b);
long unsigned int a = 0, b = 1;
auto c = ranges::max(a, b);

bug.log.txt

The error I get is joint to the report but the relevant line is:

constexpr T const &operator()(T const &a, T const &b, C pred = C{}, P proj = P{}) const
                                ^~~~~~~~
/lrde/delhi/../.conan/data/range-v3/head/dutiona/testing/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/range/v3/algorithm/min.hpp:57:32: note:   template argument deduction/substitution failed:
In file included from /lrde/delhi/../.conan/data/range-v3/head/dutiona/testing/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/range/v3/utility/copy.hpp:18,
                 from /lrde/delhi/../.conan/data/range-v3/head/dutiona/testing/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/range/v3/begin_end.hpp:24,
                 from /lrde/delhi/../.conan/data/range-v3/head/dutiona/testing/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/range/v3/algorithm/max.hpp:18,
                 from /lrde/delhi/../Dev/lrde/pylene/pylene/src/core/se/disc.cpp:5:
/lrde/delhi/../.conan/data/range-v3/head/dutiona/testing/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/range/v3/algorithm/max.hpp:55:17: 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*> >’
                 CONCEPT_REQUIRES_(
                 ^

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:

            template<class Self>
            static constexpr size_type_ size_(Self& self)
            {
                return ranges::min(
                     static_cast<size_type_>(ranges::size(self.rng1_)),
                     static_cast<size_type_>(ranges::size(self.rng2_)));
            }

by:

            template<class Self>
            static constexpr size_type_ size_(Self& self)
            {
                return std::min(
                     static_cast<size_type_>(ranges::size(self.rng1_)),
                     static_cast<size_type_>(ranges::size(self.rng2_)));
            }

then it works.

Everything compile with clang though (tested with clang 7.0).

CaseyCarter commented 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.

dutiona commented 5 years ago

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.

dutiona commented 5 years ago

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.

dutiona commented 5 years ago

I narrowed the issue to an incompatibility with the -fconcepts compile option. You can reproduce it on wandbox here: https://wandbox.org/permlink/Z1eprcFWCcAFVBxS

ericniebler commented 5 years ago

This problem no longer repros for me. Closing.