On 30 January 2015 at 19:46, Jason Merrill <ja...@redhat.com> wrote: > On 01/20/2015 09:27 AM, Ville Voutilainen wrote: >> >> +#define YES2(type) TRY(std::is_trivial<type>::value); \ >> + TRY(std::is_trivial<type[]>::value); \ >> TRY(std::is_trivial<const volatile type>::value) > > >> +YES2(void *); >> +YES2(int A::*); > > > Why would void *const volatile still be trivial?
Arrrrggggh. It isn't. YES and YES2 are macros, so YES2(void*) expands to is_trivial<const volatile void*>::value, which is true, whereas is_trivial<void* const volatile>::value is false. I think it would be reasonable to convert these macros in that test into function templates, no? :)