Boost logo

Boost :

From: Ralf W. Grosse-Kunstleve (rwgk_at_[hidden])
Date: 2005-02-02 12:54:55


--- John Maddock <john_at_[hidden]> wrote:
> Just when I thought I had got away with that update!
>
> I take it changing the static_cast to a C style cast doesn't do the job?

That's something I hadn't thought of. Unfortunately it doesn't help.
See below.

template <class T>
struct is_signed_helper
{
  static const bool value = ((T)(-1) < 0);
};

% CC -n32 -mips4 -LANG:std -c foo.cpp
cc-3314 CC: ERROR File = foo.cpp, Line = 4
  The expression must have arithmetic, enum, or pointer type.

    static const bool value = ((T)(-1) < 0);
                               ^

1 error detected in the compilation of "foo.cpp".

template <class T>
struct is_signed_helper
{
  static const T minus_one = static_cast<T>(-1);
  static const bool value = (minus_one < 0);
};

% CC -n32 -mips4 -LANG:std -c foo.cpp
cc-3314 CC: ERROR File = foo.cpp, Line = 5
  The expression must have arithmetic, enum, or pointer type.

    static const bool value = (minus_one < 0);
                               ^

1 error detected in the compilation of "foo.cpp".

template <class T>
struct is_signed_helper
{
  static const T minus_one = static_cast<T>(-1);
  static const bool value = (minus_one < 0 ? true : false);
};

% CC -n32 -mips4 -LANG:std -c foo.cpp
cc-3314 CC: ERROR File = foo.cpp, Line = 5
  The expression must have arithmetic, enum, or pointer type.

    static const bool value = (minus_one < 0 ? true : false);
                               ^

1 error detected in the compilation of "foo.cpp".

template <class T>
struct is_signed_helper
{
  static const T minus_one = static_cast<T>(-1);
  static const bool value = minus_one < 0 ? true : false;
};

% CC -n32 -mips4 -LANG:std -c foo.cpp
cc-3314 CC: ERROR File = foo.cpp, Line = 5
  The expression must have arithmetic, enum, or pointer type.

    static const bool value = minus_one < 0 ? true : false;
                              ^

1 error detected in the compilation of "foo.cpp".

template <class T>
struct is_signed_helper
{
  typedef T t_type;
  static const bool value = (static_cast<t_type>(-1) < 0);
};

% CC -n32 -mips4 -LANG:std -c foo.cpp
cc-3314 CC: ERROR File = foo.cpp, Line = 5
  The expression must have arithmetic, enum, or pointer type.

    static const bool value = (static_cast<t_type>(-1) < 0);
                               ^

1 error detected in the compilation of "foo.cpp".

template <class T>
struct is_signed_helper
{
  typedef T t_type;
  static const bool value = ((t_type)(-1) < 0);
};

% CC -n32 -mips4 -LANG:std -c foo.cpp
cc-3314 CC: ERROR File = foo.cpp, Line = 5
  The expression must have arithmetic, enum, or pointer type.

    static const bool value = ((t_type)(-1) < 0);
                               ^

1 error detected in the compilation of "foo.cpp".

// I am not sure about the validity of this one, but just
// to show that the error persists:
#include <functional>

template <class T>
struct is_signed_helper
{
  static const bool value = std::less<T>()(static_cast<T>(-1), 0);
};

% CC -n32 -mips4 -LANG:std -c foo.cpp
cc-1028 CC: ERROR File = foo.cpp, Line = 6
  The expression used must have a constant value.

    static const bool value = std::less<T>()(static_cast<T>(-1), 0);
                              ^

cc-1059 CC: ERROR File = foo.cpp, Line = 6
  A function call is not allowed in a constant expression.

    static const bool value = std::less<T>()(static_cast<T>(-1), 0);
                              ^

2 errors detected in the compilation of "foo.cpp".

// This one works, but any attempt to convert -1 appears to be doomed to fail.
template <class T>
struct is_signed_helper
{
  static const bool value = (-1u < 0);
};

                
__________________________________
Do you Yahoo!?
Read only the mail you want - Yahoo! Mail SpamGuard.
http://promotions.yahoo.com/new_mail


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