Fix GCC build errors ("explicit template specialization cannot have a storage class",

"need 'typename' before 'static_assert_<...>::type' because
'static_assert_<...>' is a dependent scope").
Fixes #767.

This was SVN commit r9167.
This commit is contained in:
Ykkrosh 2011-04-05 17:07:06 +00:00
parent 99a1049ef9
commit d3ba9a24d3
2 changed files with 10 additions and 2 deletions

View File

@ -135,6 +135,14 @@ template<> struct static_assert_<true>
typedef int type;
};
/**
* @copydoc cassert(expr)
*
* This version must be used if expr uses a dependent type (e.g. depends on
* a template parameter).
**/
#define cassert_dependent(expr) typedef typename static_assert_<(expr)>::type UID__
/**
* @copydoc cassert(expr)
*

View File

@ -435,7 +435,7 @@ static inline const char* EnumeratorFromValue(Enum UNUSED(value))
#define ENUM(enumerator, value) case value: return #enumerator;
#define ENUMERATION(name)\
template<>\
static inline const char* EnumeratorFromValue<name>(name value)\
inline const char* EnumeratorFromValue<name>(name value)\
{\
switch(value.value)\
{\
@ -464,7 +464,7 @@ public:
return;
static u64 zero;
cassert(sizeof(value) <= sizeof(zero));
cassert_dependent(sizeof(value) <= sizeof(zero));
if((flags & F_ENUM) == 0 && memcmp(&value, &zero, sizeof(value)) == 0)
return;