Проверьте, является ли const на C++03
Как проверить, является ли объект const без std::is_const C++11? Насколько я знаю, я не должен быть const_casting объектом, который был объявлен const
1 ответ:
Пример реализации для C++11
is_constприведен на cppreference , и он выглядит так:template<class T> struct is_const : false_type {}; template<class T> struct is_const<const T> : true_type {};Если вы поместите это определение в свой код C++03, вы можете использовать
is_constтам же, если вы добавите определения дляfalse_typeиtrue_type(Спасибо mfonantini за указание на отсутствующиеtrue_typeиfalse_type). Если вы определите их следующим образом, Вы очень приблизитесь к определению, используемому в C++11:Единственное отличие состоит в том, что статическоеstruct true_type { static const bool value = true; typedef bool value_type; typedef true_type type; operator value_type() const { return value; } }; struct false_type { static const bool value = false; typedef bool value_type; typedef false_type type; operator value_type() const { return value; } };valueявляется простымconst, а не aconstexpr, но обратите внимание, что это постоянное выражение, тем не менее, и может использоваться в качестве аргумента шаблона. Таким образом, для всех практических целей приведенное выше определение должно работать в C++03.Что касается последней части вашего вопроса: на самом деле нет никаких проблем с приведением неконстантного типа к const. (Незаконные ситуации могут, однако, возникнуть с указателями на указатели или ссылками на указатели, например
T**не может быть приведено кconst T**.)