草庐IT

c++ - libc++ 与 VC++ : Can non-UTF conversions be done with wstring_convert?

C++11的std::wstring_convert效果很好*用于标准UTF-8UTF-16/UCS2/UCS4转换。但是,当我尝试使用不是来自的构面实例化wstring_convert或wbuffer_convert时,它没有按预期工作://worksasexpectedstd::wstring_convert>ucs4conv;//Now,byanalogy,Iwanttotrythis:std::wstring_convert>gbconv(newstd::codecvt_byname("zh_CN.gb18030"));Clang++错误提示“在~wstring_convert

c++ - libc++ 和 libstdc++ 之间的 istream eof 差异

以下(玩具)程序在链接到libstdc++和libc++时返回不同的东西。这是libc++中的错误还是我不明白istreameof()是如何工作的?我已经尝试在linux和macosx上使用g++运行它,在macosx上使用clang,有和没有-std=c++0x。我的印象是eof()在尝试读取(通过get()或其他方式)实际失败之前不会返回true。这是libstdc++的行为方式,而不是libc++的行为方式。#include#includeintmain(){std::stringstreams;s 最佳答案 编辑:这是由于旧

c++ - 捕获 libc 错误消息,从/dev/tty 重定向

这个问题在这里已经有了答案:HowtoredirectRUNTIMEERRORStoSTDERR?(2个答案)关闭2年前。我正在trycatchlibc在检测到错误条件时生成的错误消息。比如我的测试代码:#includeintmain(){char*p=(char*)malloc(10);free(p);free(p);}生成此输出$./main***Errorin`./main':doublefreeorcorruption(fasttop):0x000000000124b010***=======Backtrace:=========/lib64/libc.so.6(+0x7d1f

c++ - 为什么libc++的map实现要用这个union?

#if__cplusplus>=201103Ltemplateunion__value_type{typedef_Keykey_type;typedef_Tpmapped_type;typedefpairvalue_type;typedefpair__nc_value_type;value_type__cc;__nc_value_type__nc;template_LIBCPP_INLINE_VISIBILITY__value_type(_Args&&...__args):__cc(std::forward(__args)...){}_LIBCPP_INLINE_VISIBILITY_

c++ - std::condition_variable_any 的 libc++ 实现

条件变量应该有关于notify()的单一顺序和unlock_sleep()(在wait()中使用的一个虚构的函数调用,其中互斥锁被解锁并且线程作为一个原子操作序列休眠)操作。使用任意可锁定器实现此目的std::condition_variable_any实现通常在内部使用另一个互斥体(以确保原子性和休眠)如果内部unlock_sleep()和notify()(notify_one()或notify_all())操作彼此之间不是原子的,您冒着一个线程解锁互斥锁、另一个线程发出信号然后原始线程进入休眠状态并且永远不会醒来的风险。我正在阅读std::condition_variable_an

c++ - libc++ 中可能存在错误?

以下代码不使用clang3.1编译,使用libc++(不知道版本,当前是Xcode自带的)。它适用于其他标准库。我的代码是否有错误,或者这是libc++中的错误?#include#includeusingnamespacestd;structA{A(constmap&m){}};structB{mapm;};我看到的错误在中:/usr/lib/c++/v1/utility:241:64:Nomembernamed'value'in'std::__1::is_nothrow_copy_constructible'我试图进一步隔离它,但这是我找到的最小示例。有趣的是,当我替换string通

c++ - C++11 是否要求分配器是默认可构造的,libstdc++ 和 libc++ 不同意?

使用稍作修改的HowardHinnants'sC++11stackallocator版本这是documentedhere和here,使用std::basic_string并使用使用libstdc++的gcc进行编译,以下示例(seeitlive):constunsignedintN=200;arenaa;short_allocac(a);std::basic_string,short_alloc>empty(ac);给出以下错误(以及其他):error:nomatchingfunctionforcallto'short_alloc::short_alloc()'if(__n==0&&_

c++ - 在 mac os x 的命令行中将 clang 与 libc++ 和 c++11 结合使用

如果我启用c++11和libc++,我什至无法使用clang编译一个简单的helloworld。比如下面的代码#includeintmain(){std::cout当我运行clang++-std=c++11-stdlib=libc++main.cpp时编译产生以下输出Infileincludedfrommain.cpp:1:Infileincludedfrom/usr/bin/../lib/c++/v1/iostream:38:Infileincludedfrom/usr/bin/../lib/c++/v1/ios:216:Infileincludedfrom/usr/bin/../l

c++ - libc++ - 停止将 std 重命名为 std::__1?

经过大量努力让clang和libc++编译、运行、与NetBeans集成,甚至交叉编译到32位机器,我想我已经搞清楚了!因此,我开始使用libstdc++没有的一些功能(这就是颠覆我的开发环境的全部原因),然后发现……我实际上做不到。libc++已安装,它可以工作,编译的程序(当它工作时)确实需要它。但是,编译器仍然试图通过混淆命名空间来尝试使用libstdc++版本;std::__1::map、std::__1::basic_string等。现在,我从thisquestion知道为什么会这样,为什么libc++会这样。我只需要知道如何抹杀它,因为它完全不适用——我真的非常想使用lib

c++ - 在 Qt Creator 中使用 libc++ 而不是 libstdc++

我在上安装了clang++3.5、g++4.9.1、libc++和QtCreatorUbuntu14.04.1。我通常使用clang++作为编译器。但最近我发现g++的libstdc++用作C++标准库。据我所知,后者目前并不完全支持C++14创新。clang++编译项目时,如何将libstd++替换为libc++?我已经完成的(.pro-文件):QMAKE_CXXFLAGS_CXX11=-std=gnu++1yCONFIG*=c++11QMAKE_CXXFLAGS+=-stdlib=libc++LIBS+=-stdlib=libc++但是QtCreator编辑器在抓取包含的文件时仍然