[英]user-defined literals combined with an uint64_t argument
我只是偶然發現了以下用戶定義的文字:
#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
。 但是, stdint.h
的uint64_t
typedef映射到GCC內置的define __UINT64_TYPE__
。
#define __UINT64_TYPE__ long unsigned int;
該定義是通過運行gcc -dM -E an_empty_file.c | grep "__UINT64_TYPE__"
gcc -dM -E an_empty_file.c | grep "__UINT64_TYPE__"
當然,用unsigned long long int
替換uint64_t
可以避免編譯錯誤。 但這兩種類型在LP64數據模型上是相同的。
這不應該默認工作嗎?
這不應該默認工作嗎?
不。 該標准要求用戶定義文字的類型為unsigned long long int
[1] 。 long unsigned int
不是同一個東西,它是它自己的不同類型。 即使它們具有完全相同的屬性, std::is_same_v<unsigned long long int, long unsigned int>
也為false。
如果要為文字取整數,則必須使用unsigned long long int
類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.