[
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)