It's because not used member functions in templates don't exist in generated code, so to check constrainst you would have to call constraints() explicitly somewhere.
This way code for constraints() is generated, so constraints are checked in compile time (and that is the purpose of Can_copy).