stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Sebor <se...@roguewave.com>
Subject Re: Potential eccp-3.9 bug
Date Thu, 10 Jul 2008 23:33:27 GMT
Travis Vitek wrote:
>  
> 
[...]
>>> The problem is that many of the trait tests do this type of 
>>> thing. I can work around this pretty easily by explicitly
>>> instantating each template in each test, but this is tedious
>>> (there are many).
>> I'm not sure I understand why you are even considering working
>> around it. Doesn't the bug make the built-in traits pretty much
>> unusable in generic code?
> 
> Not always. If the template is instantiated the error would not be seen.

The reason I ask is because I couldn't get even a simple SFINAE
test program to compile. I think the program is well-formed even
though gcc 4.3.0 chokes on too (albeit for a different reason --
see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36797)

$ cat t.cpp && eccp -A t.cpp
#include <assert.h>

template <int> struct S { };

template <class, bool> struct enable_if;
template <class T> struct enable_if<T, true> { typedef T type; };

template <class T>
int foo (typename enable_if<T,  __is_empty (T)>::type* = 0) { return 0; }

template <class T>
int foo (typename enable_if<T,  !__is_empty (T)>::type* = 0) { return 1; }

int main ()
{
     assert (0 == foo<S<0> >());
     assert (1 == foo<int>());
}
"t.cpp", line 16: error: no instance of overloaded function "foo" 
matches the
           argument list
       assert (0 == foo<S<0> >());
       ^

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


> 
>> Martin
>>
>>> I was thinking about doing something like this...
>>>
>>> #define _INSTANTIATE(T)                                       \
>>>   typedef typename                                            \
>>>   __rw_conditional<__rw_is_class_or_union<T>::value,          \
>>>                    T::type,                                   \
>>>                    void>::type _RWSTD_PASTE(dummy, __LINE__);
>>>
>>> And then sneaking a void typedef into each of my user 
>> defined types, and
>>> then using this macro in the TEST () macro that I use all over the
>>> tests. Is there a better way?
>>>
>>> Travis
>>


Mime
View raw message