Foo is reported as copy-constructible because it explicitly defines a copy constructor, and std::is_copy_constructible only checks whether such a constructor exists and is not explicitly deleted—it does not check if calling it would result in an error. The compiler allows Foo to define a copy constructor even though it attempts to copy Bar, whose copy constructor is deleted. However, actually invoking Foo's copy constructor would result in a compilation error.