LINUX.ORG.RU

Написать заглушку шаблона, выдающую ошибку при инстацировании при компиляции

 , ,


0

2

Есть некая библиотека, для доступа к функционалу которой юзеру для своего типа нужно перегрузить заданную операцию, скажем операцию XOR со специальным библиотечным типом

struct UserType{...};
LibType1 operator ^ (UserType, LibType2){...}
на самом деле для этого есть макрос, но юзер этот макрос должен не забыть заюзать. Для встроенных типов эта операция уже перегружена.

Если юзер операцию не перегрузил, но пытается заюзать функционал библиотеки, код не собирается, это нормально. Проблема в том, что при этом вылетает сообщение на много букв - компайлер перечисляет какие перегруженные операции есть и почему они не подошли. Вопрос - как бы сделать так, что бы компайлер человеческим языком лаконично говорил - чудак, перегрузи операцию (заюзай макрос), или не трогай эту штуку вообще.

Че то я попробовал со static_assert-ом, но не вышло... руки кривые;-(

Второй вопрос (но он проще) - как в коде понять есть такая операция или нет ее, и в зависмости от этого выполнять какие то действия. Эта часть компилироваться должна уже в любом случае.

cast tailgunner

★★★★★

Ждать вхождения концептов в стандарт.Это С++, и шаблоны тут всегда сыпали кучу вывода, смирись.

crarkie
()
Ответ на: комментарий от xaizek

О! Отлично, static_assert(sizeof(T)==0, ...) то что нужно. Спасибо!

AIv ★★★★★
() автор топика
Ответ на: комментарий от next_time

Тоже вариант наверное, но со static_assert-ом меньше букв. И наверное чуть более вменяемое сообщение об ошибке.

AIv ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.