Может ли объект знать свою собственную константность?

С участиемdecltype а такжеstd::is_const константность переменной может быть обнаружена извне.Но возможно ли, чтобы объект знал свою собственную постоянство? Использование должно быть как:

#include <type_traits>
#include <iostream>
#include <ios>

struct Test
{
    Test() {}

    bool print() const
    {
       // does not work as is explained in https://stackoverflow.com/q/9890218/819272
       return std::is_const<decltype(*this)>::value; // <--- what will work??
    }
};

int main()
{
    Test t;
    const Test s;

    // external constness test
    std::cout << std::boolalpha << std::is_const<decltype(t)>::value << "\n";
    std::cout << std::boolalpha << std::is_const<decltype(s)>::value << "\n";

    // internal constness test
    std::cout << std::boolalpha << t.print() << "\n";
    std::cout << std::boolalpha << s.print() << "\n"; // <--- false??
}

Выход наLiveWorkSpace Это как-то возможно?

МОТИВАЦИЯ: Я хочу иметь возможность определить, вызывается ли константная функция-член для константного объекта или исходит от неконстантного объекта. Объект может, например, представлять кеш и член представление. Если бы кэш был константным, можно было бы предположительно использовать оптимизированную процедуру отрисовки, тогда как, если бы лежащие в основе данные были неконстантными, подпрограмма отрисовки должна была бы периодически проверять, обновлялись ли данные.

НОТА: связанныйвопрос спрашивает, как сломать сборку для const объектов, но я не совсем понимаю, подразумевает ли ответ на это определенное НЕТ для моего вопроса. Если нет, я хочу записать константу в логическое значение для дальнейшего использования.

РЕДАКТИРОВАТЬ: как было отмечено @DanielFrey, конструктор не является хорошим местом для проверки на константность. Как насчет функции-члена const?

ОБНОВИТЬСпасибо всем за то, что исправили мой изначально некорректный вопрос и предоставили различные части ответа (плохо определенная константность конструкторов, ценностьthisконтекстное значениеconst, - задним числом - очевидный трюк с перегрузкой, который я упустил из виду, и константная эталонная лазейка, скрывающаяся в тени). Для меня этот вопрос был Stackoverflow в лучшем виде. Я решил выбрать ответ @ JonathanWakely, потому что он показал, как определитьMutable а такжеImmutable классы, которые укрепляют концепцию constness для достижения того, что я хочу, безошибочным способом.

Ответы на вопрос(7)

Ваш ответ на вопрос