Due to GCC 4.7.2 and lower not supporting a change in template deduction rules as explained in the answer below
http://stackoverflow.com/questions/14808663/stdunordered-mapemplace-issue-with-private-deleted-copy-constructor/14836911#14836911
the following code will not compile:
#include <utility>
class test
{
public:
test() =default;
private:
test(test const&);
};
int main()
{
std::is_convertible<test&, test>::value;
};
For the same reason, it is not possible to use classes which use the BOOST_MOVABLE_BUT_NOT_COPYABLE in situations where libstdc++ uses std::is_convertible, for instance when using piecewise construction in std::unordered_map::emplace() (I came across the issue when making an unordered_map of boost::file_mapping)
As deleting the copy constructor fixes the issue (i.e. test(test const&) =delete;), would it be at all possible for BOOST_MOVABLE_BUT_NOT_COPYABLE to do the same for compilers that support the syntax?