草庐IT

c++ - 编译器差异 : Interaction between alias resolution and name lookup

考虑这段代码:usingtype=long;namespacen{usingtype=long;}usingnamespacen;intmain(){typet;}这可以在Clang3.7和GCC5.3上干净地编译,但是MSVC19*给出以下错误消息:main.cpp(9):errorC2872:'type':ambiguoussymbolmain.cpp(1):note:couldbe'longtype'main.cpp(4):note:or'n::type'这段代码格式是否正确?标准的哪一部分说明在歧义检查之前是否已解析别名?请注意,如果您更改其中一个别名,Clang和GCC都会给

c++ - typedef 和在同一范围内使用相同名称的声明

我搜索了C++11标准(嗯,n3242草案)和互联网,但找不到准确的答案。下面的代码可以在clang3.2和g++4.7.2以及VisualStudio2010中正常编译,但我预计会出现错误。#include#includetypedefinta_t;namespacea_ns{classa_t{};}usinga_ns::a_t;intmain(){a_ta;std::cout内置:clang-std=c++11-pedantic-Wall-oaa.cpp-lstdc++g++-std=c++11-pedantic-Wall-oaa.cpp-lstdc++cl-EHsc-GRa.cp

c++ - 强枚举 typedef : clang bug or c++11 standard uncertainty?

对于这样的代码:typedefenumFooEnum:intFooEnum;enumFooEnum:int{A=1,B};clang(linux/7.0.0)报告没有错误[-c-std=c++11-pedantic],但是gcc(linux/8.2.1)不编译它:g++-c-std=c++11-pedantictest2.cpptest2.cpp:1:28:error:expected';'or'{'before'FooEnum'typedefenumFooEnum:intFooEnum;^~~~~~~test2.cpp:1:28:error:expectedclass-keybefo

c++ - 无法与 typedef 成为 friend : any particular reason?

structA{};typedefAB;structC{friendstructB;};GCC4.7.020110427告诉我error:usingtypedef-name'B'after'struct'.到目前为止,这似乎是不言自明的;毕竟,我的示例代码试图声明并加好友struct称为B,实际上不是struct-key.但是,我必须写friendstructA;如果A实际上是一个复杂的、冗长的模板元黑客,这是不可取的。我是不是遗漏了什么,或者我们实际上可以不friend通过类型别名类型?如果不是,是否有任何特殊原因或者只是语言的怪癖?Thisquestion之前提出过这个问题,但是已

c++ - 重载运算符<<(unsigned char typedef as byte)

我想重载(劫持?)ostream和basic_ostream以便它停止尝试将八位字节(无符号字符)显示为可打印字符。我一直住在cout和friend们在屏幕上放笑脸的时间太长了。我厌倦了与Actor一起工作:hex.是否可以覆盖标准行为?我已经尝试过模板和非模板覆盖。它们编译,但似乎没有被调用。 最佳答案 问题是已经有一个templatestd::basic_ostream&operator&,charT);在namespacestd.自basic_ostream也在这个命名空间中,ADL在你输出unsignedchar时选择它.添

c++ - 我怎么能(暂时)取消类型定义?

我正在使用typedef的第三方库sbyte至char.(这很糟糕,因为char可能是signed或unsigned,具体取决于编译器的选择)。不幸的是typedef已经溢出到我维护的代码库中,我很想删除它们:使用uint8_t直接代替。有什么方法可以撤消这个typedef一旦我得到我的代码(即直接在#include之后)?一旦我删除了所有byte,我就可以从我的代码库中删除“解决方案” 最佳答案 最简单的方法是将第3方库的包含括起来:#definebytesomethingnotnamedbyte#include#undefbyt

c++ - 具有 typedef 返回值的模板化成员函数

为什么下面的代码给我一个错误(g++4.1.2)?templateclassFoo{public:typedefstd::vectorAVec;AVec*foo();};templateFoo::AVec*Foo::foo(){//erroronthislinereturnNULL;}错误是:error:expectedconstructor,destructor,ortypeconversionbefore'*'token我应该如何定义Foo::foo()以其他方式运行(具有正确的返回类型)? 最佳答案 这是一个名为“two-st

c++ - 继承而不是 typedef

C++无法从typedef或typedef模板化类中创建模板。我知道如果我继承并使我的类成为模板,它就会起作用。例子://IllegaltemplatetypedefMyVectorTypevector;//Valid,butadvantageous?templateclassMyVectorType:publicvector{};这样做有利于我“伪造”typedef还是有更好的方法来做到这一点? 最佳答案 C++0x将使用using添加模板类型定义关键字。您的解决方案声明了一个新类型,而不是类型“别名”,例如你不能初始化MyVec

c++ - 如何 typedef 具有未指定大小的 std::array?

我想写一些变量,比如std::arraya;哪里array_num是constint表示数组的长度。但是它很长,我想为它创建一个别名:typedefstd::arraymy_array;是吗?如何使用my_array喜欢my_array? 最佳答案 您需要的是aliastemplate:templateusingmy_array=std::array;您不能直接制作typedef模板,参见thispost.size_t是std::array采用的第二个模板参数的类型,而不是int。既然您了解了使用,您应该会使用它。它可以做typed

windows - 为什么 Win32::ODBC 在 Perl 5.10 和 Cygwin 下找不到 ODBC.dll?

我正在尝试使用PerlODBC连接到MicrosoftSQL服务器。我的问题是Perl5.10.0在使用Win32ODBC驱动程序时遇到问题。如果我运行Perlshell并执行这一行,我会收到错误。useWin32::ODBC;Can'tload'/usr/lib/perl5/vendor_perl/5.10/i686-cygwin/auto/Win32/ODBC/ODBC.dll'formoduleWin32::ODBC:Nosuchfileordirectoryat/usr/lib/perl5/5.10/i686-cygwin/DynaLoader.pmline201.我已验证dl