Может ли пользовательский литеральный оператор C ++ когда-либо передавать нулевой указатель?
Это действительно происходит с экспериментальной версией g ++ (gcc версия 4.7.0 20111114 (экспериментальная) [trunk revision 181364] (Debian 20111114-1)) но я не уверен, является ли это ошибкой (на 90% уверен) или некоторым странным ожидаемым поведением.
Пример программы:
#include <iostream>
#include <stdexcept>
#include <string>
std::string operator "" _example (const char * text) {
using std::cerr;
using std::endl;
cerr << "text (pointer) = " << static_cast<const void *>(text) << endl;
if (!text) throw std::runtime_error("Is a null pointer really expected?");
cerr << "text (string) = \"" << text << '"' << endl;
return text;
}
int main() {
2_example;
1_example;
0_example;
}
Вывод (вероятно, ошибка вgcc ... а может и нет ?!, отсюда и вопрос):
text (pointer) = 0x8048d49
text (string) = "2"
text (pointer) = 0x8048d4b
text (string) = "1"
text (pointer) = 0
terminate called after throwing an instance of 'std::runtime_error'
what(): Is a null pointer really expected?
Aborted
Это не просто "0_example";это всякий раз, когда буквальное значение равно нулю.Например, это все еще происходит, даже если литерал "0x0000_example".
Это ошибка?Или какой-то странный особый случай, когда значение литерала равно нулю?