[ 
https://issues.apache.org/jira/browse/MINIFICPP-1289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17190064#comment-17190064
 ] 

Ferenc Gerlits edited comment on MINIFICPP-1289 at 9/3/20, 11:39 AM:
---------------------------------------------------------------------

I tried 0.5.0, and it mostly works, except in gcc 4.8, which is not fully 
C++11-compliant.  Some of the problems:
 * range-v3 0.5.0 uses {{std::max_align_t}}, which gcc 4.8 does not define 
(this could be patched)
 * there was some template deduction error that I don't even understand (full 
error message below).

{noformat}
In file included from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_traits.hpp:24:0,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/distance.hpp:22,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:18,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
                 from 
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp:
 In instantiation of ‘struct ranges::v3::concepts::m
odels<ranges::v3::concepts::Range, 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::proces
sors::TailState&) const::__lambda23>’:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/adjacent_remove_if.hpp:37:64:
   required by substitution of ‘tem
plate<class ... Ts, class A> static decltype (A:: 
bind(*static_cast<Ts&>(ranges::v3::action::action_access::impl::bind::ts) ...)) 
ranges::v3
::action::action_access::impl<Action>::bind(Ts&& ...) [with Ts = {Ts ...}; A = 
A; Action = ranges::v3::action::sort_fn] [with Ts = {const ra
nges::v3::action::sort_fn&, const 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::process
ors::TailState&) const::__lambda23&}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/action.hpp:124:17:
   required by substitution of ‘template<class
 T, class ... Rest, class A> decltype 
(ranges::v3::action::{anonymous}::make_action(ranges::v3::action::action_access::impl<A>::bind(((const
 
ranges::v3::action::action<Action>*)this)->ranges::v3::action::action<Action>::action_,
 static_cast<T&&>(t), *static_cast<Rest&>(ranges::v3
::action::action::operator()::rest) ...))) 
ranges::v3::action::action<Action>::operator()(T&&, Rest&& ...) const [with T = 
T; Rest = {Rest .
..}; A = A; Action = ranges::v3::action::sort_fn] [with T = const 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const or
g::apache::nifi::minifi::processors::TailState&) const::__lambda23&; Rest = {}; 
A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:614:79:
   required from here
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp:89:59:
 error: no match for call to ‘(const ranges::v
3::_end_::fn) 
(org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::processors::TailState&) co
nst::__lambda23&)’
                         concepts::model_of<Sentinel>(end(t), begin(t))
                                                           ^
In file included from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:17:0,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
                 from 
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:151:20:
 note: candidates are:
             struct fn
                    ^
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:184:32:
 note: template<class R> constexpr decltype (range
s::v3::_end_::fn::impl_(r, 42)) ranges::v3::_end_::fn::operator()(R&) const
                 constexpr auto operator()(R &r) const
                                ^
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:184:32:
 note:   template argument deduction/substitution 
failed:
In file included from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_fwd.hpp:21:0,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:23,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:17,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
                 from 
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:
 In substitution of ‘template<class R> constexpr decltype 
(ranges::v3::_end_::fn::impl_(r, 42)) ranges::v3::_end_::fn::operator()(R&) 
const [with R = 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::processors::TailState&) const::__lambda23]’:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp:89:59:
   required from ‘struct 
ranges::v3::concepts::models<ranges::v3::concepts::Range, 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::processors::TailState&) const::__lambda23>’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/adjacent_remove_if.hpp:37:64:
   required by substitution of ‘template<class ... Ts, class A> static decltype 
(A:: bind(*static_cast<Ts&>(ranges::v3::action::action_access::impl::bind::ts) 
...)) ranges::v3::action::action_access::impl<Action>::bind(Ts&& ...) [with Ts 
= {Ts ...}; A = A; Action = ranges::v3::action::sort_fn] [with Ts = {const 
ranges::v3::action::sort_fn&, const 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::processors::TailState&) const::__lambda23&}; A = 
ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/action.hpp:124:17:
   required by substitution of ‘template<class T, class ... Rest, class A> 
decltype 
(ranges::v3::action::{anonymous}::make_action(ranges::v3::action::action_access::impl<A>::bind(((const
 
ranges::v3::action::action<Action>*)this)->ranges::v3::action::action<Action>::action_,
 static_cast<T&&>(t), 
*static_cast<Rest&>(ranges::v3::action::action::operator()::rest) ...))) 
ranges::v3::action::action<Action>::operator()(T&&, Rest&& ...) const [with T = 
T; Rest = {Rest ...}; A = A; Action = ranges::v3::action::sort_fn] [with T = 
const org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::processors::TailState&) const::__lambda23&; Rest = 
{}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:614:79:
   required from here
{noformat}
caused by the code change
{noformat}
+#include "range/v3/all.hpp"

@@ -605,10 +607,11 @@ std::vector<TailState> TailFile::findRotatedFiles(const 
TailState &state) const
 
   utils::file::FileUtils::list_dir(state.path_, collect_matching_files, 
logger_, false);
 
-  std::sort(matched_files_with_mtime.begin(), matched_files_with_mtime.end(), 
[](const TailStateWithMtime &left, const TailStateWithMtime &right) {
+  const auto first_by_mtime_then_by_name = [](const TailStateWithMtime &left, 
const TailStateWithMtime &right) {
     return std::tie(left.mtime_, left.tail_state_.file_name_) <
            std::tie(right.mtime_, right.tail_state_.file_name_);
-  });
+  };
+  matched_files_with_mtime |= 
ranges::action::sort(first_by_mtime_then_by_name); {noformat}
in extensions/standard-processors/processors/TailFile.cpp.


was (Author: fgerlits):
I tried 0.5.0, and it mostly works, except in gcc 4.8, which is not fully 
C++11-compliant.  Some of the problems:
 * range-v3 0.5.0 uses {{std::max_align_t}}, which gcc 4.8 does not define 
(this could be patched)
 * there was some template deduction error that I don't even understand (full 
error message below).

{noformat}
In file included from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_traits.hpp:24:0,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/distance.hpp:22,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:18,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
                 from 
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp:
 In instantiation of ‘struct ranges::v3::concepts::m
odels<ranges::v3::concepts::Range, 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::proces
sors::TailState&) const::__lambda23>’:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/adjacent_remove_if.hpp:37:64:
   required by substitution of ‘tem
plate<class ... Ts, class A> static decltype (A:: 
bind(*static_cast<Ts&>(ranges::v3::action::action_access::impl::bind::ts) ...)) 
ranges::v3
::action::action_access::impl<Action>::bind(Ts&& ...) [with Ts = {Ts ...}; A = 
A; Action = ranges::v3::action::sort_fn] [with Ts = {const ra
nges::v3::action::sort_fn&, const 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::process
ors::TailState&) const::__lambda23&}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/action.hpp:124:17:
   required by substitution of ‘template<class
 T, class ... Rest, class A> decltype 
(ranges::v3::action::{anonymous}::make_action(ranges::v3::action::action_access::impl<A>::bind(((const
 
ranges::v3::action::action<Action>*)this)->ranges::v3::action::action<Action>::action_,
 static_cast<T&&>(t), *static_cast<Rest&>(ranges::v3
::action::action::operator()::rest) ...))) 
ranges::v3::action::action<Action>::operator()(T&&, Rest&& ...) const [with T = 
T; Rest = {Rest .
..}; A = A; Action = ranges::v3::action::sort_fn] [with T = const 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const or
g::apache::nifi::minifi::processors::TailState&) const::__lambda23&; Rest = {}; 
A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:614:79:
   required from here
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp:89:59:
 error: no match for call to ‘(const ranges::v
3::_end_::fn) 
(org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::processors::TailState&) co
nst::__lambda23&)’
                         concepts::model_of<Sentinel>(end(t), begin(t))
                                                           ^
In file included from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:17:0,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
                 from 
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:151:20:
 note: candidates are:
             struct fn
                    ^
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:184:32:
 note: template<class R> constexpr decltype (range
s::v3::_end_::fn::impl_(r, 42)) ranges::v3::_end_::fn::operator()(R&) const
                 constexpr auto operator()(R &r) const
                                ^
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:184:32:
 note:   template argument deduction/substitution 
failed:
In file included from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_fwd.hpp:21:0,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:23,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:17,
                 from 
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
                 from 
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:
 In substitution of ‘template<class R> constexpr decltype 
(ranges::v3::_end_::fn::impl_(r, 42)) ranges::v3::_end_::fn::operator()(R&) 
const [with R = 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::processors::TailState&) const::__lambda23]’:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp:89:59:
   required from ‘struct 
ranges::v3::concepts::models<ranges::v3::concepts::Range, 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::processors::TailState&) const::__lambda23>’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/adjacent_remove_if.hpp:37:64:
   required by substitution of ‘template<class ... Ts, class A> static decltype 
(A:: bind(*static_cast<Ts&>(ranges::v3::action::action_access::impl::bind::ts) 
...)) ranges::v3::action::action_access::impl<Action>::bind(Ts&& ...) [with Ts 
= {Ts ...}; A = A; Action = ranges::v3::action::sort_fn] [with Ts = {const 
ranges::v3::action::sort_fn&, const 
org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::processors::TailState&) const::__lambda23&}; A = 
ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/action.hpp:124:17:
   required by substitution of ‘template<class T, class ... Rest, class A> 
decltype 
(ranges::v3::action::{anonymous}::make_action(ranges::v3::action::action_access::impl<A>::bind(((const
 
ranges::v3::action::action<Action>*)this)->ranges::v3::action::action<Action>::action_,
 static_cast<T&&>(t), 
*static_cast<Rest&>(ranges::v3::action::action::operator()::rest) ...))) 
ranges::v3::action::action<Action>::operator()(T&&, Rest&& ...) const [with T = 
T; Rest = {Rest ...}; A = A; Action = ranges::v3::action::sort_fn] [with T = 
const org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const 
org::apache::nifi::minifi::processors::TailState&) const::__lambda23&; Rest = 
{}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:614:79:
   required from here

{noformat}

> Add range-v3
> ------------
>
>                 Key: MINIFICPP-1289
>                 URL: https://issues.apache.org/jira/browse/MINIFICPP-1289
>             Project: Apache NiFi MiNiFi C++
>          Issue Type: Improvement
>            Reporter: Marton Szasz
>            Priority: Minor
>              Labels: MiNiFi-CPP-Hygiene
>
> Useful library to raise the level of abstraction from iterators to ranges and 
> provide useful related concepts.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to