Я просто наткнулся на следующий пользовательский литерал:
#include <cstdint>
constexpr auto operator""_G(uint64_t v) { return v * 1'000'000'000ULL; }
Однако это не компилируется с GNU 7.3.0 и -std=c++14
.Я получаю сообщение об ошибке «имеет неверный список аргументов».
В соответствии с https://en.cppreference.com/w/cpp/language/user_literal, единственным разрешенным 64-битным типом без знака является unsigned long long int
.Однако uint64_t
typedef из stdint.h
сопоставляется со встроенным определением GCC __UINT64_TYPE__
.
#define __UINT64_TYPE__ long unsigned int;
Это определение получается при выполнении gcc -dM -E an_empty_file.c | grep "__UINT64_TYPE__"
Конечнозамена uint64_t
на unsigned long long int
позволяет избежать ошибки компиляции.Но эти два типа идентичны в модели данных LP64.
Разве это не должно работать по умолчанию?