error C2770: invalid explicit template argument(s) for 'void
foo(boost::enable_if<boost::mpl::not_<boost::has_trivial_destructor<T>>>::type
*)'
Can someone see what the problem might be?
Actually, it looks like the code's working -- you're SFINAEing out foo for types that have a trivial destructor -- which includes int. It works the same in g++4.5 and VC10.
Removing the not wrapper allows the code to compile on both -- as it should.
Try passing a type with a non-trivial destructor (e.g., std::string) to allow this use to compile.