https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90415
--- Comment #9 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Lei YU from comment #7) > Additional information. > > std::experimental::fundamentals_v1::any has no problem, so the below code > compiles fine. The difference is that std::experimental::any doesn't constrain the any(T&&) constructor on is_copy_constructible<T>, instead it just makes it a hard error (using a static assert in the constructor body). std::any has to SFINAE the any(T&&) constructor away if T is not copy constructible, which leads to a cycle when that constructor is being considered during instantiation of is_copy_constructible<T>.