При компиляции следующей программы-примера с онлайн-компилятором godbolt.org Clang-9.0.0 и MSV C v19.24 сообщают об ошибках в строках, отмеченных (1) и (2). Сообщение об ошибке говорит, что выражение (reinterpret_cast<uintptr_t>(&x), 1)
не оценивается как константа. Но это так, не правда ли?
G CC -9.2, с другой стороны, компилирует этот образец без ошибок.
#include <memory>
int x;
enum
{
Value = (reinterpret_cast<uintptr_t>(&x), 1) // (1)
};
template <int N>
struct Test
{
};
Test<(reinterpret_cast<uintptr_t>(&x), 1)> t; // (2)
Вопрос: действительно ли (reinterpret_cast<uintptr_t>(&x), 1)
оценить до константы?