The SFINAE forumulation used to test convertibility did not
correctly hide the conversion failure in ane expression that would
avoid a compiler diagnostic. Switched the idiom to add one more
layer of indirection and use enable_if which fixes the problem.
Also there were a few errors with const-volatile matching causing the
partial specializaitons that handled N2255 to not trigger correctly
for array types.
The following tests now compile in gcc-4.7.
futures.async/async.pass.cpp map.cons/move_alloc.pass.cpp map.cons/move_assign.pass.cpp map.modifiers/insert_iter_rv.pass.cpp map.modifiers/insert_rv.pass.cpp meta.rel/is_convertible.pass.cpp multimap.cons/move_alloc.pass.cpp multimap.cons/move_assign.pass.cpp multimap.modifiers/insert_iter_rv.pass.cpp multimap.modifiers/insert_rv.pass.cpp pairs.pair/rv_pair_U_V.pass.cpp pairs.spec/make_pair.pass.cpp thread.once.callonce/call_once.pass.cpp unique.ptr.runtime.ctor/default02.pass.cpp unique.ptr.runtime.ctor/pointer02.pass.cpp unique.ptr.single.ctor/default02.pass.cpp unique.ptr.single.ctor/pointer02.pass.cpp unorder.map.modifiers/emplace_hint.pass.cpp unorder.map.modifiers/emplace.pass.cpp unorder.map.modifiers/insert_hint_rvalue.pass.cpp unorder.map.modifiers/insert_rvalue.pass.cpp unord.multimap.modifiers/emplace_hint.pass.cpp unord.multimap.modifiers/emplace.pass.cpp unord.multimap.modifiers/insert_hint_rvalue.pass.cpp unord.multimap.modifiers/insert_rvalue.pass.cpp
Couldn't __create be replaced by declval, defined earlier in this file?