You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Compilation failed with only moveable type or only copyable type #32
According to this issue: jinja2cpp/Jinja2Cpp#157
For now, nonstd::expected_lite has got no copy-constructor:
home/travis/build/jinja2cpp/examples-build/thirdparty/Jinja2Cpp/src/statements.cpp:426:6: required from here
/home/travis/build/jinja2cpp/examples-build/thirdparty/variant-lite/include/nonstd/variant.hpp:1915:17: error: use of deleted function ‘nonstd::expected_lite::expected<std::shared_ptr<jinja2::TemplateImpl<char> >, jinja2::ErrorInfoTpl<char> >::expected(const nonstd::expected_lite::expected<std::shared_ptr<jinja2::TemplateImpl<char> >, jinja2::ErrorInfoTpl<char> >&)’
return v(arg);
But current wording of p0323 requires the explicit copy-ctor:
constexpr expected(const expected&);
constexpr expected(expected&&) noexcept(see below);
template<class U, class G>
explicit(see below) constexpr expected(const expected<U, G>&);
template<class U, class G>
explicit(see below) constexpr expected(expected<U, G>&&);
Looks like the proper solution for this issue is to keep the previous version of copy-ctor (before the patch) and add extra template<class U, class G> explicit(see below) constexpr expected(const expected<U, G>& rhs); ctor with the corresponding requirements.
I. e. move moveable/copyable traits handling to the storage_t class via additional template params and partial specialization. In this case expected_t will inherit this traits automatically.
Activity
Innokentiy-Alaytsev commentedon Sep 13, 2019
Hello!
Same problem here. What is the motivation behind this design?
Innokentiy-Alaytsev commentedon Sep 13, 2019
I've applied the following patch to my local copy to make it work with non-copyable or non-movable types.
allow-non-copyable-and-non-movable.patch
martinmoene commentedon Sep 14, 2019
Likeky related to issue #29
Make template parameter dependent (#29, #32, thanks to @cbegue, @Inno…
Make template parameter dependent, void specialization (#29, #32, tha…
cbegue commentedon Sep 16, 2019
Thanks for your patches I will test your modifications soon and give you a feedback.
flexferrum commentedon Oct 7, 2019
According to this issue: jinja2cpp/Jinja2Cpp#157
For now, nonstd::expected_lite has got no copy-constructor:
But current wording of p0323 requires the explicit copy-ctor:
Looks like the proper solution for this issue is to keep the previous version of copy-ctor (before the patch) and add extra
template<class U, class G> explicit(see below) constexpr expected(const expected<U, G>& rhs);ctor with the corresponding requirements.flexferrum commentedon Oct 7, 2019
The possible solution looks like this: https://godbolt.org/z/sbB4PL
I. e. move moveable/copyable traits handling to the
storage_tclass via additional template params and partial specialization. In this caseexpected_twill inherit this traits automatically.flexferrum commentedon Oct 8, 2019
The problem with the current implementation is perfectly described here: https://stackoverflow.com/questions/27073082/conditionally-disabling-a-copy-constructor
(in the question)
martinmoene commentedon Oct 8, 2019
Thanks @flexferrum for the help & pointers. Will look at it later.
Move moveable/copyable traits handling to the storage_t (#32, thanks to
prince-chrismc commentedon Apr 24, 2020
Would it be possible to get a 0.3.1 release with these changes? its much easier than tracking patches.
martinmoene commentedon Apr 24, 2020
@prince-chrismc I'll release current state as version 0.4.0, hopefully by tomorrow.
prince-chrismc commentedon Apr 24, 2020
Wow thanks! It's greatly appreciated! Absolutely love this project ❤️
martinmoene commentedon Apr 24, 2020
@prince-chrismc released version 0.4.0