Boost logo

Boost :

Subject: Re: [boost] [contract] concepts: pseudo-signatures vs. usage patterns
From: Matt Calabrese (rivorus_at_[hidden])
Date: 2012-10-14 04:48:45


On Sun, Oct 14, 2012 at 4:32 AM, Lorenzo Caminiti <lorcaminiti_at_[hidden]>wrote:

> Boost.Preprocessor should already impl most of the workarounds needed.
> Some other workarounds (not too many) will be needed in Boost.Generic
> for empty (e.g., ( void ) instead of ( ) ) and to ensure proper macro
> expansion order (usually PP_EXPAND or similar but re-impl because of
> reentrancy). That's at least my experience with supporting both MSVC
> and GCC for Boost.Contract.
>

At the time I wrote most of Boost.Generic, the variadic extensions to
Boost.Preprocessor didn't exist and neither did the variadic macro data
library in the sandbox, so I had to make most of the facilities from
scratch. Supporting MSVC with my hand-rolled macros was secondary to
getting something standard-compliant working (which is a big feat on its
own).

This is unfortunate because again, a large number of users have to use
> MSVC... what were the MSVC issues that caused the Boost.Generic
> concept emulation code not to work (pp a side)?

Off-hand, here are some of the features I require, not including a
compliant preprocessor (I believe VC++ supports many of these now):

the extended sfinae rules
variadic templates
template aliases
relaxed typename rule
rvalue references
static_assert
decltype
default template arguments for function templates
template aliases
compliant <type_traits>
compliant <utility>

-- 
-Matt Calabrese

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