Travis Vitek wrote: > Sorry for top posting... > > Yes, the __rw_is_convertible_impl::_C_make should probably be changed to return __rw_remove_cv<_TypeT>::type (probably with a typedef). We should probably add a case for this in the 20.meta.rel.cpp test also. > > I'm on vacation today otherwise I'd make the necessary changes myself. Note: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36656 > > Travis > > > -----Original Message----- > From: Martin Sebor on behalf of Martin Sebor > Sent: Thu 6/26/2008 10:12 PM > To: dev@stdcxx.apache.org > Subject: Re: implementation of Unary Traits > > Eric Lemings wrote: >> >> >>> -----Original Message----- >>> From: Martin Sebor [mailto:msebor@gmail.com] On Behalf Of Martin Sebor >>> Sent: Thursday, June 26, 2008 5:45 PM >>> To: dev@stdcxx.apache.org >>> Subject: implementation of Unary Traits >>> >>> The implementation of Unary Traits (e.g., is_void) uses explicit >>> specialization on all four combinations of cv-qualifiers for each >>> trait (plain, const, volatile, and const volatile). I'm wondering >>> if the alternative approach of stripping the qualifiers before >>> "dispatching" to just one explicit specialization has been >>> considered. The potential advantage of this approach is fewer >>> declarations, smaller translation units, and thus (presumably) >>> faster compilation. >> Though I'm using a relational (binary) type trait, I'm getting warnings >> because the cv-qualifiers are not being stripped. > > A test case is always helpful: > > #include > > int main () > { > return !std::is_convertible::value; > } > > Seems like is_convertible might need to strip top-level cv qualifiers > from the types. What do you think, Travis? > > Martin > >> gcc -c -I/work/stdcxx/branches/4.3.x/include/ansi -D_RWSTDDEBUG >> -pthread -I/work/stdcxx/branches/4.3.x/include >> -I/build/stdcxx-4.3.x-15D/include >> -I/work/stdcxx/branches/4.3.x/tests/include -std=gnu++0x >> -D_RWSTD_EXT_CXX_0X -W -Wall -Wcast-qual -Winline -Wshadow >> -Wwrite-strings -Wno-long-long -Wcast-align >> /work/stdcxx/branches/4.3.x/tests/utilities/20.tuple.cnstr.cpp >> /work/stdcxx/branches/4.3.x/include/rw/_meta_rel.h: In >> instantiation of '__rw::__rw_is_convertible_impl': >> /work/stdcxx/branches/4.3.x/include/rw/_meta_rel.h:93: >> instantiated from '__rw::__rw_is_convertible_3> false>' >> /work/stdcxx/branches/4.3.x/include/rw/_meta_rel.h:122: >> instantiated from '__rw::__rw_is_convertible_2' >> /work/stdcxx/branches/4.3.x/include/rw/_meta_rel.h:145: >> instantiated from '__rw::__rw_is_convertible_1> false>' >> /work/stdcxx/branches/4.3.x/include/rw/_meta_rel.h:163: >> instantiated from '__rw::__rw_is_convertible' >> /work/stdcxx/branches/4.3.x/include/tuple:68: instantiated >> from 'std::tuple::_C_is_compatible' >> /work/stdcxx/branches/4.3.x/include/tuple:123: instantiated >> from 'std::tuple<_Types>::tuple(_TypesU&& ...) [with _TypesU = int, >> _TypesT = const int]' >> >> /work/stdcxx/branches/4.3.x/tests/utilities/20.tuple.cnstr.cpp:103: >> instantiated from here >> /work/stdcxx/branches/4.3.x/include/rw/_meta_rel.h:77: warning: >> type qualifiers ignored on function return type >> >> Brad. > >