http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54259
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target|debian on amd64 | Host|debian on amd64 | --- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-08-14 16:51:56 UTC --- It looks like a problem caused by 4.7 not implementing access control for SFINAE, which is fixed on trunk. You can workaround it by removing your private copy constructor and inheriting from a type like boost::noncopyable: struct noncopyable { noncopyable() { } private: noncopyable(const noncopyable&); }; template <class Type> class LockGuard : noncopyable { // ... private: // LockGuard(const LockGuard &); }; Now LockGuard's copy constructor will be deleted, and works well with SFINAE.