首页 > TAG信息列表 > c17

c11 c17-primary expression-generic selection 泛型 _Generic 关键字

   基本表达式  primary expresson primary-expression:           generic-selection           ( expression )           string-literal           constant           identifier  primary expression 包含 5 中具体实现: identifier   consta

c17.联合体,内存管理

联合体:共享内存,对同一块内存 采取不同类型进行解释            有名的联合体变量               哑元结构,x为哑元结构定义的结构体变量    加typedef之后,x为类型名                    .%c打印出来为a,b       0000 0010 0000 0001   

c-GMOCKing接口时std :: any的类型不完整

这个代码段存在一个非常奇怪的编译问题: #include <any> #include <gmock/gmock.h> struct Class { virtual std::any get(int, int) = 0; }; struct MockClass: Class { MOCK_METHOD2(get, std::any(int, int)); }; int foo() { MockClass dd; } 错误gcc 9.1.0

c-如果条件导致错误,则在constexpr中比较constexpr函数参数

我正在尝试比较constexpr-if语句中的函数参数. 这是一个简单的示例: constexpr bool test_int(const int i) { if constexpr(i == 5) { return true; } else { return false; } } 但是,当我使用带有以下标志的GCC 7进行编译时: g -7 -std = c 1z test.cpp -o test我收到以下错误

c-尽管存在显式实例化,但类模板的成员函数模板找不到定义.不连结

编辑:这不是链接问题的重复,因为我使用的是显式实例化,只有特定类型的成员函数不链接(其他人则链接). 以下代码可以编译,但无法链接,我也不明白为什么. 显式实例化Vector类以限制T的可能参数的数量,因此隐藏了Vector的定义.在.cpp文件中. // fwd_decl.hpp #pragma once template<ty

c-VS 2017程序无法识别“ scoped_lock”

我在VS 2017中使用scoped_locked遇到了问题.我相信我可以将其追溯到< mutex>中.声明,复制如下.在开始时禁用#if开关以使用scoped_lock的最安全方法是什么?再次感谢. #if _HAS_CXX17 // CLASS TEMPLATE scoped_lock template<class... _Mutexes> class scoped_lock { // class wit

C如何替换构造函数开关?

我想用更优雅的东西代替大开关. class Base { public: Base(void*data, int size); virtual void Something() = 0; } class A : public Base { public: A(void*data, int size) : Base(data, size) {} void Something() override; } class B : public Base { public: B

c-尝试传递constexpr lambda并使用它来显式指定返回类型

我想使用一个函数并传递一个constexpr lambda.但是,只有让我通过auto推导类型时,它才能成功编译.通过->明确给出类型. std :: array< event,l()>似乎失败了(初审).为什么是这样? template <typename Lambda_T> constexpr static auto foo(Lambda_T l) -> std::array<event, l()> {

c-boost :: combine,基于范围的for和结构化绑定

有没有一种方法可以使boost :: combine与结构化绑定和基于范围的for一起工作(以便结构绑定中的标识符实际上指向容器的元素,而不是在底层使用的boost :: combine的嵌套元组)?以下(live example)编译失败: #include <boost/range/combine.hpp> #include <iostream> int main() {

c-std :: visit for variant无法在clang 5下编译

这个问题已经在这里有了答案:            >            get<string> for variants fail under clang++ but not g++                                    1个 std :: visit的以下用法在gcc 7.2下可正确编译,但在clang

c-为什么boost :: filesystem :: path和std :: filesystem :: path缺少运算符?

考虑以下有关路径分解的断言,其中每个局部变量例如词干具有明显的初始化功能,例如自动词干= path.stem()— assert(root_path == root_name / root_directory); assert(path == root_name / root_directory / relative_path); assert(path == root_path / relative_path); assert

c-将整数模板参数值映射到原始类型

我想将数字映射到类型.对于此示例,我将创建一个将sizeof()结果映射到带符号原始类型的函数. 我想知道是否有更好的方法可以做下面我在现代C中所做的事情,即采用模板化的值并将其转换为类型.现在,这可以将大小转换为已知类型,但是我似乎无法在标准库中找到满足我需要的内容.我错过了

保留C类型信息以归档以在程序调用中使用

编辑:根据需要突出显示具有更多上下文的实际问题. 我要实现以下方法: template <typename T> <unspecified> type_identification(); 对于通用类型T,它必须返回(相对)唯一的标识,该标识在同一程序的多次调用中稳定,并且可以用于进程间通信(因此,没有基于指针的解决方案). 可以使用

c – std :: experimental :: is_detected的奇怪MSVC行为

我实现了基于on this article on cppreference.com的std :: experimental :: is_detected(部分代码低于工作repro). 它适用于G和Clang,但导致MSVC的奇怪错误行为:is_detected似乎总是bool_constant< true>! 在这里,您可以使用gcc 5.x查看正确的结果: @ideone.com 但是使用MSVC 19(随VS

C有安全的导航运算符吗?

在Modern C中,有没有办法安全导航? 例如,而不是…… if (p && p->q && p->q->r) p->q->r->DoSomething(); …通过使用某种短路智能指针或其他一些利用运算符重载的语法或标准C库或Boost中的某些东西,具有简洁的语法. p?->q?->r?->DoSomething(); // C++ pseudo-code. 上下文

c – 使用std :: launder从指向非活动对象的指针获取指向活动对象成员的指针?

这个问题跟随这个one 我们来考虑这个示例代码: struct sso { union{ struct { char* ptr; char size_r[8]; } large_str; char short_str[16]; }; bool is_short_str() const{ return *std::launder(short_str+15)=='\0'; //UB? }

c – static_cast’d指针值

在当前的标准草案(和C 17)中,this是关于static_casting a void *的: A prvalue of type “pointer to cv1 void” can be converted to a prvalue of type “pointer to cv2 T”, where T is an object type and cv2 is the same cv-qualification as, or greater cv-qualificatio

c – 如何在自己的成员函数中构造类时强制类模板参数推导?

考虑以下代码: struct A {}; template <typename T> struct B { B(T) {} auto foo() {return B(A{});} // error: no matching function for call to 'B<int>::B(A)' }; auto foo() {return B(A{});} // compiles int main() { foo(); B

c – 由lambda捕获的std :: cout的本地引用,而不需要它

我迷失了吗?这总是允许的吗? #include <iostream> int main() { auto& os = std::cout; auto write = []() { os << "what\n"; }; write(); } 我正在使用: Apple LLVM version 10.0.0 (clang-1000.10.44.4) Target: x86_64-

读取二进制文件的惯用C 17标准方法是什么?

通常我会使用C样式文件IO,但我正在尝试一种现代C方法,包括使用C 17特定功能std :: byte和std :: filesystem. 将整个文件读入内存,传统方法: #include <stdio.h> #include <stdlib.h> char *readFileData(char *path) { FILE *f; struct stat fs; char *buf; sta

c – 可以使用自动占位符来推断非类型模板参数中的函数结果吗?

考虑简单的例子: template <auto(*X)()> struct Foo { decltype(X()) x; }; int bar(); int main() { static_cast<void>(Foo<bar>{}); } [gcc]和[clang]似乎都接受了代码.代码真的符合c 17吗?如果是这样,还有其他一些规则会导致以下代码生成错误吗? template <class T,

clang 4使用c 1z构建错误

我刚刚将我的arch linux系统更新到包含gcc 7.1.1的最新版本.试图建立这个: #include <functional> int main(int argc, char** argv) { return 1; } 使用命令 clang++ main.cpp -std=c++1z 导致错误: In file included from main.cpp:1: In file included from /usr/bin/..

如何在Xcode for Mac OSX中启用C 17?

如何在OSX High Sierra(10.13.5)上的Xcode(9.4.1)中启用C 17?解决方法:在OSX High Sierra(10.13.5)上使用Xcode(9.4.1)中的C 17的步骤: >在Xcode中打开现有或创建一个新的C项目 >单击“显示项目导航器”按钮.它位于最小化/最大化/关闭窗口按钮下方的Xcode窗口的左上部分.它是最左侧的

该代码是否无法在C 17中编译?

我正在更新一个项目以使用C 17,并发现一些实例,其中遵循此模式的代码在最近版本的clang上导致编译错误: #include <boost/variant.hpp> struct vis : public boost::static_visitor<void> { void operator()(int) const { } }; int main() { boost::variant<int> v = 0;

c – 我可以使用std :: pair,但重命名.first和.second成员名称?

我遇到的一个常见设计问题是,我将两个变量捆绑在一起,然后失去了以有意义的方式引用它们的能力. std::pair<int,int> cords; cord.first = 0; //is .first the x or y coordinate? cord.second = 0; //is .second the x or y coordinate? 我考虑过编写基本结构,但后来我失去了很