|
Boost : |
Subject: Re: [boost] [xpressive] Compiler error on VC7.1
From: Robert Dailey (rcdailey.lists_at_[hidden])
Date: 2012-07-10 14:13:12
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