|
Boost : |
Subject: Re: [boost] [xpressive] Compiler error on VC7.1
From: Eric Niebler (eric_at_[hidden])
Date: 2012-05-22 20:02:42
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.
HTH,
-- Eric Niebler BoostPro Computing http://www.boostpro.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk