|
Boost : |
From: Joaquín Mª López Muñoz (joaquin_at_[hidden])
Date: 2004-10-26 11:30:23
Your snippet compiles fine here (MSVC++ 6.0 with Service
Pack 5), so your problem must lie elsewhere.
MSVC++ 6.0 has a non-conforming treatment of "typename",
but in different contexts than yours. For example:
template <typename Iterator>
struct iterator_wrapper
{
typedef typename Iterator::value_type value_type; // here
};
In the example, typename is required though MSVC++ 6.0 can
live without it. In other contexts the situation is worse, cause typename
is required but MSVC++ 6.0 won't accept it.
For these situations there's a portability macro called
BOOST_DEDUCED_TYPENAME defined in <boost/config.hpp>.
But this is not meant to be used where you describe.
HTH
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
christoph_at_[hidden] ha escrito:
> Hi,
>
> sorry if this is a stupid question but I haven't found an answer in
> the mail archive. I can hardly believe that it hasn't been asked before.
>
> Everywhere in the boost libs I see code like
>
> namespace boost {
>
> // Just a simple "envelope" for non-type template parameters. Useful
> // to work around some MSVC deficiencies.
>
> template <typename T, T n>
> struct non_type { };
>
> }
>
> The problem is the "typename T" part. MSVC 6 does not compile this,
> it wants "class T". How do I get around this MSVC deficiency (I have
> SP 5 installed, at least my admin says so)? Isn't there something like
> BOOST_TEMPLPAR_TYPENAME_KEYWORD that is defined to be equal to class
> for MSVC <= 6 (and maybe others) an equal to typename for able
> compilers?
>
> Cheers,
>
> Christoph
> _______________________________________________
> 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