Re: templated constanst
ups! the return type... I changed it, and recompile. I forgot the error
message, i?m sorry.
struct num_base
{
==>> MY_STCONS(bool, is_bounded, false);
MY_STCONS(bool, is_exact, false);
};
D:\src\test\main.cpp(17) : error C2258: illegal pure syntax, must be '=
0'
D:\src\test\main.cpp(17) : error C2252: 'is_bounded' : pure specifier
can only be specified for functions
the fulll code is below again:
#define MY_STCONS(ty, name, val) static const ty name =
(ty)(val)
namespace mystd {
struct num_base
{
MY_STCONS(bool, is_bounded, false);
MY_STCONS(bool, is_exact, false);
};
template <class T>
struct num_procs : public num_base
{
inline static T foo() { return T(0); }
};
struct num_int_base : public num_base
{
MY_STCONS(bool, is_bounded, false);
MY_STCONS(bool, is_exact, false);
};
template <> struct num_procs<int> : public num_int_base
{
typedef int T;
inline static T foo() { return T(20); }
};
int main (int argc, char **argv)
{
return (0);
}
and the full log is :
--------------------Configuration: test - Win32
Debug--------------------
Compiling...
main.cpp
d:\src\test\main.cpp(7) : error C2258: illegal pure syntax, must be '=
0'
d:\src\test\main.cpp(7) : error C2252: 'is_bounded' : pure specifier
can only be specified for functions
d:\src\test\main.cpp(8) : error C2258: illegal pure syntax, must be '=
0'
d:\src\test\main.cpp(8) : error C2252: 'is_exact' : pure specifier can
only be specified for functions
d:\src\test\main.cpp(21) : error C2258: illegal pure syntax, must be '=
0'
d:\src\test\main.cpp(21) : error C2252: 'is_bounded' : pure specifier
can only be specified for functions
d:\src\test\main.cpp(22) : error C2258: illegal pure syntax, must be '=
0'
d:\src\test\main.cpp(22) : error C2252: 'is_exact' : pure specifier can
only be specified for functions
Error executing cl.exe.
test.exe - 8 error(s), 0 warning(s)
kanze ha escrito:
Javier Loureiro wrote:
I just read the "limits" header (included with visual 2003),
and it uses the macro :
#define _STCONS(ty, name, val) static const ty name = (ty)(val)
to declare numeric_limits member variables like has_infinity,
is_integer, etc, inside a struct declaration...
I wrote this simple code using such macro and the limits class
inheritance, and it does not compile...
#define MY_STCONS(ty, name, val) static const ty name = (ty)(val)
namespace mystd {
struct num_base
{
MY_STCONS(bool, is_bounded, false);
MY_STCONS(bool, is_exact, false);
};
template <class T>
struct num_procs : public num_base
{
inline static foo() { return T(0); }
};
struct num_int_base : public num_base
{
MY_STCONS(bool, is_bounded, false);
MY_STCONS(bool, is_exact, false);
};
template <> struct num_procs<int> : public num_int_base
{
typedef int T;
inline static foo() { return T(20); }
};
What's the error message? I see an obvious error in the fact
that you don't declare a return type for the functions foo(),
but that error should be clear from the error message. The rest
seems OK at first glance.
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]