boost::variant<T, E>
에서 파생 된 형식이 있습니다. 다음 작업을 수행하고 복사 생성자를 사용할 수 없기 때문에 이유를 알아낼 수 없습니다. 일부 SFINAE
이 실패한 것으로 보입니다. boost::variant<T, E>
구조가 상속 된 생성자에서 T
을 ExpectedResult<T, E>
으로 삼키는 것으로 보입니다. 가장 간단한 솔루션으로 작동하도록 수정하려면 어떻게해야합니까?boost.variant 파생 형식 : 복사 생성자를 사용할 수 없습니다.
template <class T, class E>
class ExpectedResult : boost::variant<T, E> {
public:
using boost::variant<T, E>::variant;
};
ExpectedResult<int,float> er;
ExpectedResult<int, float> er2 = er;
error: no type named 'type' in 'boost::enable_if<boost::mpl::and_<boost::mpl::not_<boost::is_same<Emotiv::Cortex::Utilities::ExpectedResult<int, float>, boost::variant<int, float> > >, boost::detail::variant::is_variant_constructible_from<const Emotiv::Cortex::Utilities::ExpectedResult<int, float> &, boost::mpl::l_item<mpl_::long_<2>, int, boost::mpl::l_item<mpl_::long_<1>, float, boost::mpl::l_end> > >, mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> >, void>'; 'enable_if' cannot be used to disable this declaration
typename boost::enable_if<mpl::and_<
^~~~~~~~~~
note: in instantiation of member function 'boost::variant<int, float>::variant' requested here
using boost::variant<T, E>::variant;
while substituting deduced template arguments into function template 'ExpectedResult' [with T = Emotiv::Cortex::Utilities::ExpectedResult<int, float>]
ExpectedResult<int, float> er2 = er;
가드 동작을 버그로 간주해야합니까? 나는 필요한 모든 복제를 과도하게 찾는다. 어쩌면 내가 버그를 제출해야합니다. –
@ GermánDiago 유형이 아마도 상속되지 않도록 설계되었습니다. 하지만 is_same을 is_base_of로 바꿔서 자신의 경우에 작동하도록 만들 수 있습니다. 그게 다른 문제를 일으킬 수 있는지 나는 모른다. – Yakk