вно созданного на базе временн

Автор admin Пятница, 22 мая 2009 11:32

вно созданного на базе временного объекта, возвращаемого вызовом Error_NarrowingConversion(). Компилятор знает размер нового класса Error_Narrowing_conversion (так как он пуст), поэтому использование sizeof во время компиляции на внешнем уровне STATIC_CHECK() допустимо. Преобразование временного объекта Error_Narrowing_conversion в StaticCheck
проходит успешно, внешнее применение StaticCheck
тоже, и выполнение программы продолжается. Теперь посмотрим, чтоб произойдет, если раскомментировать последнюю строку main(): char с = safe_cast(p): На этот раз макрос STATIC_CHECK() внутри safe_cast(p) расширяется в следующий фрагмент: { \ class Error_NarrowingConversion{}; \ sizeof(StaticCheck \ (Error_Narrowi ngConversi on())); \ } Поскольку выражение sizeof(void*)<=sizeof(char) ложно, компилятор пытается преобразовать временный объект Error_NarrowingConversion в StaticCheck: sizeof(StaticCheck(Error_NarrowingConversiоп())); Попытка завершается неудачей, и компилятор прекращает свою работу с выдачей сообщения вида Cannot cast from ‘Error_Narrowi


Комментарии закрыты.