Boost logo

Boost :

Subject: Re: [boost] [xpressive] Compiler error on VC7.1
From: Robert Dailey (rcdailey.lists_at_[hidden])
Date: 2012-05-14 13:07:51


Sorry I sent my last email too soon. Let me provide a more detailed example.

This fails to compile:
bos >> _serverName >> (as_xpr(".pushsvcs")|".access")

But this compiles just fine (if I add an as_xpr() wrapper around ".access"):
bos >> _serverName >> (as_xpr(".pushsvcs")|as_xpr(".access"))

This is odd... shouldn't the former work just fine? It doesn't fail to
compile on MSVC v9

On Mon, May 14, 2012 at 12:05 PM, Robert Dailey <rcdailey.lists_at_[hidden]>wrote:

> The problem appears to be with as_xpr(). If I don't use it, it compiles
> fine.
>
>
> On Mon, May 14, 2012 at 11:38 AM, Robert Dailey <rcdailey.lists_at_[hidden]>wrote:
>
>> _serverName is a std::string.
>>
>> I wish I could better understand the compiler error, I just don't know
>> for sure if it's a problem with my own code or an incompatibility with
>> boost & MSVC7.1
>>
>>
>> On Fri, May 11, 2012 at 1:51 PM, Eric Niebler <eric_at_[hidden]> wrote:
>>
>>> I just tried the below code on VC++ 2003 (7.1) and was unable to
>>> reproduce your error. (I assume _serverName is of type sregex?) I'm
>>> afraid I don't know what to tell you. Perhaps if you could give me a
>>> complete repro scenario, I might be able to help.
>>>
>>>
>>> On 5/11/2012 9:56 AM, Robert Dailey wrote:
>>> > Anyone have an idea on this issue? It's currently blocking me from
>>> checking
>>> > in this code to source control, since the code absolutely must work on
>>> MSVC
>>> > 7.1 :-(
>>> >
>>> > On Thu, May 10, 2012 at 4:45 PM, Robert Dailey <
>>> rcdailey.lists_at_[hidden]>wrote:
>>> >
>>> >> Hi,
>>> >>
>>> >> I'm using Boost 1.49 Xpressive on VC7.1. When I compile the following
>>> >> code, I get compiler errors (these do not appear on VC9):
>>> >>
>>> >> sregex const& rex = bos >> _serverName >> !as_xpr("_GWDomino") >>
>>> >> ".diagnostics" >> *(as_xpr(".base")|".renamed");
>>> >>
>>> >> 'rex' is really a function parameter in my real world use case. I'm
>>> >> passing the entire static regex into a function that takes a 'sregex
>>> >> const&'. I get the compiler error below. Anyone know why this is
>>> happening?
>>> >>
>>> >>
>>> >>
>>> C:\Code\work\cmake-decomp\build-vc7\third_party\boost\1.49.0-stlport-5.2.1\include\boost\proto\traits.hpp(691)
>>> >> : error C2664:
>>> 'boost::proto::exprns_::expr<Tag,Args,Arity>::expr(const
>>> >> boost::proto::exprns_::expr<Tag,Args,Arity> &)' : cannot convert
>>> parameter
>>> >> 1 from
>>> >>
>>> 'boost::proto::detail::as_expr<T,Generator,WantsBasicExpr>::result_type' to
>>> >> 'const boost::proto::exprns_::expr<Tag,Args,Arity> &'
>>> >> with
>>> >> [
>>> >> Tag=boost::proto::tagns_::tag::terminal,
>>> >>
>>> >> Args=boost::proto::argsns_::term<boost::proto::detail::as_expr<const
>>> char
>>> >>
>>> [10],boost::proto::detail::base_generator<boost::proto::default_generator>::type,false>::value_type>,
>>> >> Arity=0
>>> >> ]
>>> >> and
>>> >> [
>>> >> T=const char [10],
>>> >>
>>> >>
>>> Generator=boost::proto::detail::base_generator<boost::proto::default_generator>::type,
>>> >> WantsBasicExpr=false
>>> >> ]
>>> >> and
>>> >> [
>>> >> Tag=boost::proto::tagns_::tag::terminal,
>>> >>
>>> >> Args=boost::proto::argsns_::term<boost::proto::detail::as_expr<const
>>> char
>>> >>
>>> [10],boost::proto::detail::base_generator<boost::proto::default_generator>::type,false>::value_type>,
>>> >> Arity=0
>>> >> ]
>>> >> Reason: cannot convert from
>>> >>
>>> 'boost::proto::detail::as_expr<T,Generator,WantsBasicExpr>::result_type' to
>>> >> 'const boost::proto::exprns_::expr<Tag,Args,Arity>'
>>> >> with
>>> >> [
>>> >> T=const char [10],
>>> >>
>>> >>
>>> Generator=boost::proto::detail::base_generator<boost::proto::default_generator>::type,
>>> >> WantsBasicExpr=false
>>> >> ]
>>> >> and
>>> >> [
>>> >> Tag=boost::proto::tagns_::tag::terminal,
>>> >>
>>> >> Args=boost::proto::argsns_::term<boost::proto::detail::as_expr<const
>>> char
>>> >>
>>> [10],boost::proto::detail::base_generator<boost::proto::default_generator>::type,false>::value_type>,
>>> >> Arity=0
>>> >> ]
>>> >> No constructor could take the source type, or constructor
>>> overload
>>> >> resolution was ambiguous
>>> >>
>>> >>
>>> \Code\work\cmake-decomp\server\exchange\tools\uploadlog\uploader.cpp(1372)
>>> >> : see reference to function template instantiation 'const
>>> >> boost::add_const<T>::type
>>> boost::proto::functional::as_expr<>::operator
>>> >> ()<char,10>(const char (&)[10]) const' being compiled
>>> >> with
>>> >> [
>>> >> T=boost::proto::detail::as_expr<const char
>>> >>
>>> [10],boost::proto::detail::base_generator<boost::proto::default_generator>::type,false>::result_type
>>> >> ]
>>> >>
>>> >
>>> > _______________________________________________
>>> > Unsubscribe & other changes:
>>> http://lists.boost.org/mailman/listinfo.cgi/boost
>>> >
>>>
>>> --
>>> Eric Niebler
>>> BoostPro Computing
>>> http://www.boostpro.com
>>>
>>> _______________________________________________
>>> Unsubscribe & other changes:
>>> http://lists.boost.org/mailman/listinfo.cgi/boost
>>>
>>
>>
>


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk