2012-10-18 4 views
2

나는 무슨 일이 일어나고 있는지 정말로 이해하지 못합니다. 내가 MSVC 2012을 사용하고 있는데,이 코드는 잘 작동 할 것으로 예상된다 (51)을 밀어하지만 컴파일되지 않습니다Boost :: variant가 std :: ostream에 대해 연산자 <<를 해결할 수 없습니다.

#include "stdafx.h" 
#include <string> 
#include <boost/variant/recursive_variant.hpp> 

namespace NsSemSDK 
{ 

struct STreeConstructionRuleRegexp { 
    std::string m_strEntity; 
}; 

struct STreeConstructionRuleString { 
    std::string m_strEntity; 
}; 

struct STreeConstructionRuleIdentifier { 
    std::string m_strEntity; 
}; 

typedef int STreeConstructionRuleNumber; 

typedef boost::variant<STreeConstructionRuleRegexp, STreeConstructionRuleNumber> STreeConstructionRuleOperand; // STreeConstructionRuleString, STreeConstructionRuleIdentifier 

} 

std::ostream& operator<<(std::ostream& stream, const NsSemSDK::STreeConstructionRuleRegexp& val) 
{ 
    return stream << '\'' << val.m_strEntity << '\''; 
} 

std::ostream& operator<<(std::ostream& stream, const NsSemSDK::STreeConstructionRuleString& val) 
{ 
    return stream << '"' << val.m_strEntity << '"'; 
} 

std::ostream& operator<<(std::ostream& stream, const NsSemSDK::STreeConstructionRuleIdentifier& val) 
{ 
    return stream << val.m_strEntity; 
} 

using namespace NsSemSDK; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    STreeConstructionRuleNumber num = 1024; 
    STreeConstructionRuleOperand operand = num; 
    std::cout << operand << std::endl; 
} 

내가 받고 있어요 것은 :

1>------ Build started: Project: ConsoleApplication3, Configuration: Debug Win32 ------ 
1> Source.cpp 
1>c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\detail\variant_io.hpp(64): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const T0' (or there is no acceptable conversion) 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(695): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup] 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(742): or  'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup] 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(780): or  'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup] 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(827): or  'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup] 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(953): or  'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)' [found using argument-dependent lookup] 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(960): or  'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)' [found using argument-dependent lookup] 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(967): or  'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)' [found using argument-dependent lookup] 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(974): or  'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)' [found using argument-dependent lookup] 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(984): or  'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>,T>(std::basic_ostream<_Elem,_Traits> &&,const _Ty &)' [found using argument-dependent lookup] 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char>, 
1>    T=T0, 
1>    _Ty=T0 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(1101): or  'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const std::error_code &)' [found using argument-dependent lookup] 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\blank.hpp(93): or  'std::basic_ostream<_Elem,_Traits> &boost::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const boost::blank &)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(201): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(207): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(214): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(221): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(241): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(275): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(295): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(int)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(320): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned int)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(340): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(360): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned long)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(381): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(401): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(422): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(442): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(462): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(482): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream(502): or  'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   while trying to match the argument list '(std::basic_ostream<_Elem,_Traits>, const T0)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\variant.hpp(859) : see reference to function template instantiation 'void boost::detail::variant::printer<OStream>::operator()<const T>(const T &) const' being compiled 
1>   with 
1>   [ 
1>    OStream=std::basic_ostream<char,std::char_traits<char>>, 
1>    T=T0 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\variant.hpp(859) : see reference to function template instantiation 'void boost::detail::variant::printer<OStream>::operator()<const T>(const T &) const' being compiled 
1>   with 
1>   [ 
1>    OStream=std::basic_ostream<char,std::char_traits<char>>, 
1>    T=T0 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\detail\visitation_impl.hpp(130) : see reference to function template instantiation 'void boost::detail::variant::invoke_visitor<Visitor>::internal_visit<const T>(T &,int)' being compiled 
1>   with 
1>   [ 
1>    Visitor=boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>>, 
1>    T=T0 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\detail\visitation_impl.hpp(130) : see reference to function template instantiation 'void boost::detail::variant::invoke_visitor<Visitor>::internal_visit<const T>(T &,int)' being compiled 
1>   with 
1>   [ 
1>    Visitor=boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>>, 
1>    T=T0 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\detail\visitation_impl.hpp(173) : see reference to function template instantiation 'void boost::detail::variant::visitation_impl_invoke_impl<Visitor,VoidPtrCV,T>(int,Visitor &,VoidPtrCV,T *,boost::mpl::true_)' being compiled 
1>   with 
1>   [ 
1>    Visitor=boost::detail::variant::invoke_visitor<boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>>>, 
1>    VoidPtrCV=const void *, 
1>    T=T0 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\detail\visitation_impl.hpp(256) : see reference to function template instantiation 'void boost::detail::variant::visitation_impl_invoke<Visitor,VoidPtrCV,T0,NoBackupFlag>(int,Visitor &,VoidPtrCV,T *,NoBackupFlag,int)' being compiled 
1>   with 
1>   [ 
1>    Visitor=boost::detail::variant::invoke_visitor<boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>>>, 
1>    VoidPtrCV=const void *, 
1>    NoBackupFlag=boost::variant<NsSemSDK::STreeConstructionRuleRegexp,NsSemSDK::STreeConstructionRuleNumber>::has_fallback_type_, 
1>    T=T0 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\variant.hpp(1803) : see reference to function template instantiation 'void boost::detail::variant::visitation_impl<first_which,first_step,Visitor,VoidPtrCV,boost::variant<T0_,T1>::has_fallback_type_>(const int,const int,Visitor &,VoidPtrCV,boost::mpl::false_,NoBackupFlag,Which *,step0 *)' being compiled 
1>   with 
1>   [ 
1>    Visitor=boost::detail::variant::invoke_visitor<boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>>>, 
1>    VoidPtrCV=const void *, 
1>    T0_=NsSemSDK::STreeConstructionRuleRegexp, 
1>    T1=NsSemSDK::STreeConstructionRuleNumber, 
1>    NoBackupFlag=boost::variant<NsSemSDK::STreeConstructionRuleRegexp,NsSemSDK::STreeConstructionRuleNumber>::has_fallback_type_, 
1>    Which=first_which, 
1>    step0=first_step 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\variant.hpp(1825) : see reference to function template instantiation 'void boost::variant<T0_,T1>::internal_apply_visitor_impl<Visitor,const void*>(int,int,Visitor &,VoidPtrCV)' being compiled 
1>   with 
1>   [ 
1>    T0_=NsSemSDK::STreeConstructionRuleRegexp, 
1>    T1=NsSemSDK::STreeConstructionRuleNumber, 
1>    Visitor=boost::detail::variant::invoke_visitor<boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>>>, 
1>    VoidPtrCV=const void * 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\variant.hpp(1825) : see reference to function template instantiation 'void boost::variant<T0_,T1>::internal_apply_visitor_impl<Visitor,const void*>(int,int,Visitor &,VoidPtrCV)' being compiled 
1>   with 
1>   [ 
1>    T0_=NsSemSDK::STreeConstructionRuleRegexp, 
1>    T1=NsSemSDK::STreeConstructionRuleNumber, 
1>    Visitor=boost::detail::variant::invoke_visitor<boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>>>, 
1>    VoidPtrCV=const void * 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\variant.hpp(1847) : see reference to function template instantiation 'void boost::variant<T0_,T1>::internal_apply_visitor<boost::detail::variant::invoke_visitor<Visitor>>(boost::detail::variant::invoke_visitor<Visitor> &) const' being compiled 
1>   with 
1>   [ 
1>    T0_=NsSemSDK::STreeConstructionRuleRegexp, 
1>    T1=NsSemSDK::STreeConstructionRuleNumber, 
1>    Visitor=boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>> 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\variant.hpp(1847) : see reference to function template instantiation 'void boost::variant<T0_,T1>::internal_apply_visitor<boost::detail::variant::invoke_visitor<Visitor>>(boost::detail::variant::invoke_visitor<Visitor> &) const' being compiled 
1>   with 
1>   [ 
1>    T0_=NsSemSDK::STreeConstructionRuleRegexp, 
1>    T1=NsSemSDK::STreeConstructionRuleNumber, 
1>    Visitor=boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>> 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\detail\variant_io.hpp(88) : see reference to function template instantiation 'void boost::variant<T0_,T1>::apply_visitor<boost::detail::variant::printer<OStream>>(Visitor &) const' being compiled 
1>   with 
1>   [ 
1>    T0_=NsSemSDK::STreeConstructionRuleRegexp, 
1>    T1=NsSemSDK::STreeConstructionRuleNumber, 
1>    OStream=std::basic_ostream<char,std::char_traits<char>>, 
1>    Visitor=boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>> 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\boost\variant\detail\variant_io.hpp(88) : see reference to function template instantiation 'void boost::variant<T0_,T1>::apply_visitor<boost::detail::variant::printer<OStream>>(Visitor &) const' being compiled 
1>   with 
1>   [ 
1>    T0_=NsSemSDK::STreeConstructionRuleRegexp, 
1>    T1=NsSemSDK::STreeConstructionRuleNumber, 
1>    OStream=std::basic_ostream<char,std::char_traits<char>>, 
1>    Visitor=boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>> 
1>   ] 
1>   c:\users\vsevolod.sauta\documents\visual studio 2012\projects\consoleapplication3\consoleapplication3\source.cpp(47) : see reference to function template instantiation 'std::basic_ostream<_Elem,_Traits> &boost::operator <<<char,std::char_traits<char>,NsSemSDK::STreeConstructionRuleRegexp,NsSemSDK::STreeConstructionRuleNumber,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_>(std::basic_ostream<_Elem,_Traits> &,const boost::variant<T0_,T1> &)' being compiled 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char>, 
1>    T0_=NsSemSDK::STreeConstructionRuleRegexp, 
1>    T1=NsSemSDK::STreeConstructionRuleNumber 
1>   ] 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

그렇게하지 T0 유형이 무엇인지, 왜 T0에 형변환되는지. 나는 그것을 boost :: variant 내부의 것으로 기대한다. 그러나 여전히 나는 아무런 단서도 가지고 있지 않습니다. 이유는 무엇입니까? 변형 된 모든 유형의 연산자 "< <"이 정의됩니다.

답변

3

네임 스페이스 NsSemSDK 내에 operator<<을 정의해야 이러한 기능을 ADL에서 찾을 수 있습니다. 일 (Example.)

#include <string> 
#include <iostream> 
#include <boost/variant.hpp> 

namespace NsSemSDK 
{ 

struct STreeConstructionRuleRegexp { 
    std::string m_strEntity; 
}; 

struct STreeConstructionRuleString { 
    std::string m_strEntity; 
}; 

struct STreeConstructionRuleIdentifier { 
    std::string m_strEntity; 
}; 

typedef int STreeConstructionRuleNumber; 

std::ostream& operator<<(std::ostream& stream, 
         const STreeConstructionRuleRegexp& val) 
{ 
    return stream << '\'' << val.m_strEntity << '\''; 
} 

std::ostream& operator<<(std::ostream& stream, 
         const STreeConstructionRuleString& val) 
{ 
    return stream << '"' << val.m_strEntity << '"'; 
} 

std::ostream& operator<<(std::ostream& stream, 
         const STreeConstructionRuleIdentifier& val) 
{ 
    return stream << val.m_strEntity; 
} 

typedef boost::variant< 
    STreeConstructionRuleRegexp, 
    STreeConstructionRuleNumber 
> STreeConstructionRuleOperand; 

// STreeConstructionRuleString, STreeConstructionRuleIdentifier 
} 

using namespace NsSemSDK; 

int main() 
{ 
    STreeConstructionRuleNumber num = 1024; 
    STreeConstructionRuleOperand operand = num; 
    std::cout << operand << std::endl; 
} 

출력

1024

+0

예. C++은 매우 복잡한 언어입니다. :-) – svv