I'd use type traits. If you're using C++11, look up std::is_copy_constructible() and std::is_copy_assignable() in <type_traits>.

These are compile time tests.