// { dg-do compile { target c++11 } } template struct NonCopyable { NonCopyable() = default; NonCopyable(NonCopyable const&); }; template<> NonCopyable::NonCopyable(NonCopyable const&) = delete; // { dg-message "declared" } template NonCopyable::NonCopyable(NonCopyable const&) = default; template<> NonCopyable::NonCopyable(NonCopyable const&) = delete; // { dg-message "declared" } int main() { NonCopyable nc_dbl; NonCopyable nc_dbl_cpy(nc_dbl); // { dg-error "use" } NonCopyable nc_int; NonCopyable nc_int_cpy(nc_int); // { dg-error "use" } NonCopyable nc_char; NonCopyable nc_char_cpy(nc_char); }