Каков самый простой и наименее навязчивый способ указать компилятору, будь то с помощью параметров компилятора, #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);