Какой самый простой и наименее навязчивый способ указать компилятору, будь то с помощью параметров компилятора, #define
s, typedef
s или шаблонов, что каждый раз, когда я говорю T
, я действительно имею в виду T const
? Я бы предпочел не использовать внешний препроцессор. Поскольку я не использую ключевое слово mutable
, его можно было бы повторно использовать для указания изменчивого состояния.
Редактировать: Поскольку намерение было ошибочным полностью (и так как я не был рядом в течение нескольких часов, чтобы уточнить), позвольте мне объяснить. По сути, я просто хочу знать, какие системы доступны для манипулирования системой типов во время компиляции. Мне все равно, если это создает нестандартный, плохой, не поддерживаемый, бесполезный код. Я не собираюсь использовать это в производстве. Это просто любопытство.
Потенциальные (субоптимальные) решения на данный момент:
// I presume redefinition of keywords is implementation-defined or illegal.
#define int int const
#define ptr * const
int i(0);
int ptr j(&i);
typedef int const Int;
typedef int const* const Intp;
Int i(0);
Intp j(&i);
template<class T>
struct C { typedef T const type; typedef T const* const ptr; };
C<int>::type i(0);
C<int>::ptr j(&i);