Почему спецификаторы исключений для перегруженных операторов '< <' не работает ни с одним объектом std :: ostream, но работает с определенными в библиотеке?

Если вы не хотите использовать какой-либо объект, вы можете использовать setattr() внутри вашего текущего модуля:

import sys
current_module = module = sys.modules[__name__]  # i.e the "file" where your code is written
setattr(current_module, 'variable_name', 15)  # 15 is the value you assign to the var
print(variable_name)  # >>> 15, created from a string
1
задан Casey 24 March 2019 в 01:26
поделиться

1 ответ

Причина в том, что declval генерирует временный объект, поэтому, если у вашего кода есть другая перегрузка, такая как

ostream& operator<<(ostream&& out, const Foo& foo) noexcept { return out << foo.value; }

, он будет работать. Обратите внимание, что перегруженная функция принимает ссылку на rvalue. Я проверил это с gcc 4.8.5 и -std=c++11.

0
ответ дан CS Pei 24 March 2019 в 01:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: