Boost logo

Boost :

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


I've confirmed that version 1.37 is the latest version that works with
VC7.1, I am not able to reproduce this compiler error in that version. Any
version above this fails. Eric, maybe if you get the time you can look at
the diff between the two and perhaps discover a bug? I'm not 100% sure this
is a compiler issue, could be a bug too. Worth looking into (I would do it
for you if I had the domain knowledge of xpressive's internals).

Thanks again for your guidance.

On Tue, Jul 10, 2012 at 1:13 PM, Robert Dailey <rcdailey.lists_at_[hidden]>wrote:

> Thanks Eric. What's disappointing is that I'm stuck on this ancient
> compiler, but nothing I can do about it :-(
>
> So far I've tried Boost 1.40 and 1.39, both fail the same way (no
> appropriate default constructor for as_expr). I'm trying 1.38 now to see if
> it works. What version of boost was xpressive introduced in? I am not sure
> how far back I can go.
>
>
> On Tue, Jul 10, 2012 at 12:15 PM, Eric Niebler <eric_at_[hidden]> wrote:
>
>>
>> Sorry, I missed your response the first time. I'm really sorry to
>> disappoint you, Robert, but I can only guess that the change I mentioned
>> wasn't the first to break proto/xpressive on VC7.1. My only suggestion
>> is to keep trying earlier releases until you find one that works. I'm
>> not going to be supporting VC7.1 again.
>>
>> Eric
>>
>>
>> On 7/10/2012 8:42 AM, Robert Dailey wrote:
>> > Any idea why the version you suggested isn't working Eric? Any other
>> > suggestions?
>> >
>> > On Tue, Jun 26, 2012 at 11:15 AM, Robert Dailey <
>> rcdailey.lists_at_[hidden]>wrote:
>> >
>> >> On Tue, May 22, 2012 at 7:02 PM, Eric Niebler <eric_at_[hidden]>
>> wrote:
>> >>
>> >>> On 5/22/2012 12:14 PM, Jeffrey Lee Hellrung, Jr. wrote:
>> >>>> On Tue, May 22, 2012 at 11:50 AM, Robert Dailey <
>> >>> rcdailey.lists_at_[hidden]>wrote:
>> >>>>
>> >>>>> On Tue, May 22, 2012 at 12:47 PM, Jeffrey Lee Hellrung, Jr. <
>> >>>>> jeffrey.hellrung_at_[hidden]> wrote:
>> >>>>>
>> >>>>>> On Tue, May 22, 2012 at 9:18 AM, Robert Dailey <
>> >>> rcdailey.lists_at_[hidden]
>> >>>>>>> wrote:
>> >>>>>>
>> >>>>>>> I provided a sample to reproduce this issue. Has anyone had a
>> chance
>> >>> to
>> >>>>>> try
>> >>>>>>> it? I'm still blocked and can't build....
>> >>>>>>>
>> >>>>>>> On Mon, May 14, 2012 at 4:53 PM, Robert Dailey <
>> >>>>> rcdailey.lists_at_[hidden]
>> >>>>>>>> wrote:
>> >>>>>>>
>> >>>>>>>> Here is a small sample that reproduces the issue. Compile this
>> using
>> >>>>>>>> Visual Studio .NET 2003 and use Boost v1.49
>> >>>>>>>
>> >>>>>> [...]
>> >>>>>>
>> >>>>>> I'm not familiar with xpressive nor do I have access to VS 2003.
>> >>> Indeed,
>> >>>>>> you might be hard pressed to find support for VS 2003...? Have you
>> >>> tried
>> >>>>>> the same code on a more recent version of VS and/or on another
>> >>> compiler
>> >>>>>> series (gcc, intel, clang, ...)?
>> >>>>>
>> >>>>>
>> >>>>> I mentioned earlier that the same code works just fine on Visual
>> Studio
>> >>>>> 2008. However, Boost is supposed to be portable, I think this also
>> >>> applies
>> >>>>> to older compilers. We don't all have the luxury of working on the
>> >>> latest &
>> >>>>> greatest. I was hoping the author would look at this, maybe fix any
>> >>> issues,
>> >>>>> and provide a patch. I've tried debugging this issue myself but I
>> just
>> >>>>> don't understand boost's internals.
>> >>>>>
>> >>>>
>> >>>> Older compilers may have bugs; older versions of VS especially have
>> >>> quite a
>> >>>> few bugs that sometimes don't crop up except in very specific and
>> >>>> unpredictable acrobatic template contexts. Boost does its best to
>> work
>> >>>> around them but it's obviously difficult to account for all compiler
>> >>>> deficiencies. And I'm not suggesting that you must transition to the
>> >>> latest
>> >>>> and greatest, but I might suggest later and greater :)
>> >>>>
>> >>>> It looks like Eric tried an original version of the code and had no
>> >>>> problems, and he *did* offer that he might be able to help if you
>> >>> include a
>> >>>> "complete repro scenario" (which I've unfortunately snipped...oops).
>> >>>> So...hopefully he or someone else will get around to looking at it.
>> You
>> >>>> might get more attention if you create a trac ticket, attach the
>> code to
>> >>>> it, and reference the ticket in a mailing list message.
>> >>>
>> >>> Apologies for the delay, I was at BoostCon. I was able to reproduce
>> the
>> >>> error, but not fix it I'm afraid. A smaller repro is:
>> >>>
>> >>> #include <boost/proto/core.hpp>
>> >>> int main() {
>> >>> boost::proto::as_expr<boost::proto::default_domain>("abcd");
>> >>> }
>> >>>
>> >>> This used to work on VC7.1 but stopped working many Boost releases ago
>> >>> due to a major refactorization in Proto. I spent a few hours trying to
>> >>> work around the problem, but the work-around eluded me. Note that the
>> >>> following actually compiles:
>> >>>
>> >>> boost::proto::as_expr("abcd");
>> >>>
>> >>> This is exactly identical to the above. (When you don't specify a
>> >>> domain, it defaults to default_domain.) For whatever reason, it's
>> >>> different enough to cause the problem. The older VC releases are like
>> >>> that. :-(
>> >>>
>> >>> VC7.1 hasn't been part of the Boost test matrix in eons. There's no
>> >>> reasonable way to keep it working while preserving my sanity, so I'm
>> >>> dropping support for it in Proto and xpressive. Sorry. If you simply
>> >>> must stick with VC7.1, I suggest reverting to Boost 1.43. It should
>> work
>> >>> there.
>> >>
>> >>
>> >> Hey sorry for the late response, I haven't had a chance to work on this
>> >> for a while. I'm finally back on it. I am using Boost 1.43 as you
>> >> instructed but I still get a compiler failure:
>> >>
>> >>
>> C:\Code\work\cmake\dpd-cmake-sandbox\build-vc71\third_party\boost\1.43.0\include\boost\proto\expr.hpp(96)
>> >> : error C2166: l-value specifies const object
>> >>
>> C:\Code\work\cmake\dpd-cmake-sandbox\build-vc71\third_party\boost\1.43.0\include\boost\proto\expr.hpp(93)
>> >> : error C2512: 'boost::proto::exprns_::expr<Tag,Args,Arity>' : no
>> >> appropriate default constructor available
>> >> with
>> >> [
>> >> Tag=boost::proto::tag::terminal,
>> >> Args=boost::proto::argsns_::term<const
>> >> boost::proto::result_of::as_expr<const char
>> >> [6],boost::proto::domainns_::default_domain,void,void>::arg0_>,
>> >> Arity=0
>> >> ]
>> >>
>> >>
>> C:\Code\work\cmake\dpd-cmake-sandbox\build-vc71\third_party\boost\1.43.0\include\boost\proto\detail\expr0.hpp(96)
>> >> : see reference to function template instantiation
>> >> 'boost::proto::exprns_::expr<Tag,Args,Arity>
>> >> boost::proto::detail::make_terminal<T,boost::proto::tag::terminal,const
>> >> char,6>(const T (&)[6],boost::proto::exprns_::expr<Tag,Args,Arity> *)'
>> >> being compiled
>> >> with
>> >> [
>> >> Tag=boost::proto::tag::terminal,
>> >> Args=boost::proto::argsns_::term<const
>> >> boost::proto::result_of::as_expr<const char
>> >> [6],boost::proto::domainns_::default_domain,void,void>::arg0_>,
>> >> Arity=0,
>> >> T=char
>> >> ]
>> >>
>> >>
>> C:\Code\work\cmake\dpd-cmake-sandbox\build-vc71\third_party\boost\1.43.0\include\boost\proto\traits.hpp(267)
>> >> : see reference to function template instantiation 'const
>> >> boost::proto::exprns_::expr<Tag,Args,Arity>
>> >> boost::proto::exprns_::expr<Tag,Args,Arity>::make<const T[6]>(A0 (&))'
>> >> being compiled
>> >> with
>> >> [
>> >> Tag=boost::proto::tag::terminal,
>> >> Args=boost::proto::argsns_::term<const
>> >> boost::proto::result_of::as_expr<const char
>> >> [6],boost::proto::domainns_::default_domain,void,void>::arg0_>,
>> >> Arity=0,
>> >> T=char,
>> >> A0=const char [6]
>> >> ]
>> >>
>> >>
>> C:\Code\work\cmake\dpd-cmake-sandbox\build-vc71\third_party\boost\1.43.0\include\boost\proto\traits.hpp(839)
>> >> : see reference to function template instantiation 'const
>> >> boost::proto::result_of::as_expr<T,Domain,Void,Void2>::reference
>> >> boost::proto::result_of::as_expr<T,Domain,Void,Void2>::call<const char[
>> >> 6]>(T2 (&))' being compiled
>> >> with
>> >> [
>> >> T=const char [6],
>> >> Domain=boost::proto::domainns_::default_domain,
>> >> Void=void,
>> >> Void2=void,
>> >> T2=const char [6]
>> >> ]
>> >>
>> >>
>> \Code\work\cmake\dpd-cmake-sandbox\server\exchange\tools\uploadlog\uploader.cpp(1413)
>> >> : see reference to function template instantiation 'const
>> >> boost::proto::result_of::as_expr<T,Domain,Void,Void2>::reference
>> >> boost::proto::functional::as_expr<>::operator ()<char,6>(const char
>> (&)[6])
>> >> const' being compiled
>> >> with
>> >> [
>> >> T=const char [6],
>> >> Domain=boost::proto::domainns_::default_domain,
>> >> Void=void,
>> >> Void2=void
>> >>
>> >>
>> >
>> > _______________________________________________
>> > 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