c++ - 防止将 uint64_t 转换为 uint16_t

标签 c++ c++11 clang

为什么下面的代码在clang++中编译?

是否有任何 c++ 标志来防止这种情况发生 - 我希望编译器抛出错误,因为我将 std::uint64_t 作为参数传递给接受 std::uint16_t 的函数。

#include <cstdint>
using namespace std;

void foo(uint16_t x) {
}

int main() {
    uint64_t x = 10000;
    foo(x);
    return 0;
}

最佳答案

你可以在 c++11 中删除一个函数

void foo(uint64_t) = delete;

它通过在函数重载解析时添加签名来工作,如果匹配得更好,则会发生错误。您也可以使其通用,只允许您的原始签名

template <class T> void foo( T&& ) = delete;

关于c++ - 防止将 uint64_t 转换为 uint16_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30583090/

相关文章:

c++ - 链接器错误 MPI

c++ - 如何为类提供几个可变参数模板模板参数

c++ - C++11标准有没有全新的序列化和反射库?

c++ - 如何静态断言 std::array 类成员在 c++11 中进行排序?

clang:-fsanitize=undefined 有 128 次整数运算( undefined reference `__muloti4')

c++ - 在c++中非法使用 float

c++ - aligned_storage 的基本用途是什么?

c - 使用Clang编译器通过Make构建LLVM项目时出现怪异标志

c++ - 编写二进制文件模板函数

c++ - 传递 Lambda 时,Visual Studio 2017 中的什么扩展消除了 "bool"与 "std::function"的歧义?