Tôi có hai (hoặc nhiều hơn) mẫu mà mỗi mẫu có thể thích ứng với một tập hợp các lớp cụ thể, được xác định bằng một khái niệm. Để có thể làm cho hai mẫu có cùng tên, chúng phải là các chuyên môn.C++ khái niệm và chuyên môn về mẫu; làm thế nào để có được một lỗi biên dịch thân thiện với người dùng
template< typename T >
struct pin_in { static_assert(always_false<T>::value, . . .); };
template< is_pin_in T >
struct pin_in<T> . . .
template< is_pin_in_out T >
struct pin_in<T> . . .
Điều này hoạt động khi một trong các chuyên môn phù hợp. Khi không khớp với mẫu cơ bản được chọn, và tôi nhận được xác nhận thất bại. Cơ chế hoạt động. Tôi yêu các khái niệm!
Nhưng thông báo lỗi tôi nhận được (GCC 7.2.0) trỏ đến xác nhận. Tôi có thể bằng cách nào đó làm cho mẫu cơ sở không được chọn, vì vậy tôi sẽ nhận được một thông báo lỗi cho biết rằng không có mẫu nào phù hợp với lớp đối số?
Tại sao bạn không thể thêm thông báo (đối số thứ 2) vào xác nhận tĩnh? –
Tất nhiên tôi có, đó là. . . Nhưng thông báo lỗi chính vẫn trỏ đến xác nhận, không phải là dòng gây ra lỗi đó. –
Trình biên dịch đôi khi thêm một backtrace trong dạng _in instantiation của Object_ và _required từ đây_, nơi nó trỏ nơi các instantiation đã diễn ra. –