Вызвать пользовательский литерал на lvalue
Есть ли способ вызвать пользовательский литерал на lvalues?
например, я хотел бы
int operator "" _xor1(int a) { return a^1; }
// Works fine
17_xor1;
auto myint = get_something_only_availabe_at_runtime();
// Any way to use _xor1 on myint?
_xor1(myint); // Doesn't work
Кроме того, при компиляции следующего кода в проводнике компилятора я с удивлением обнаружил, что все это было решено во время выполнения, хотя все данные доступны во время компиляции. Это почему?
constexpr int operator "" _xor1(unsigned long long a) {
return a^1;
}
int main() {
// This code resolves the user defined literal at runtime on gcc,
// msvc and clang - I don't see why I can't use the
// user defined literal at runtime?
return 17_xor1;
}
2 ответа
Решение
Я не уверен, что вы действительно хотите - как прокомментировано, вам, вероятно, лучше определить обычную функцию и вызвать ее - но я верю, что вы можете вызвать ее с помощью operator""_xor1(myInt)
,
Нет, вы не можете вызвать пользовательский литерал для переменной, заполненной во время выполнения. И вам не нужно. Просто определите автономную функцию, которую различные части кода могут вызывать при необходимости, например:
template <typename T>
T do_xor1(T a) { return a^1; }
int operator "" _xor1(unsigned long long a) { return do_xor1(a); }
// Works fine
17_xor1;
auto myint = get_something_only_availabe_at_runtime();
do_xor1(myint);