C 11模板代码 - 无法在XCode中编译
C++11 templates code - failed to compile in XCode
我有此代码:
template<bool, class _Ty1, class _Ty2> struct MyIf
{ // type is _Ty2 for assumed false
typedef _Ty2 type;
};
template<class _Ty1, class _Ty2> struct MyIf<true, _Ty1, _Ty2>
{ // type is _Ty1 for assumed true
typedef _Ty1 type;
};
template<class _Ty>
struct my_decay
{
// determines decayed version of _Ty
typedef typename std::decay<_Ty>::type _Ty1;
typedef typename MyIf<
std::is_arithmetic<_Ty1>::value, typename _Ty1, //(1)
typename MyIf<
std::is_same<LuaString, _Ty1>::value, typename _Ty1, //(2)
typename _Ty //(3)
>::type
>::type type;
};
在Visual Studio 2015下,它汇总了。但是,当我将代码移植到Xcode时,我会收到以下错误:
- for(1(=>期望在" typeName"之后获得合格的名称
- for(2(=>类型名称不允许指定存储类
- for(3(=>类型名称不允许指定存储类
在Xcode中,我将C laguage Dialcet设置为gnu 14,C 标准库至C 11支持和使用的编译器是Apple LLVM 8.1。
my_decay
Ty
和 _Ty1
中的
不是合格的名称。这意味着您无需在它们上使用typename
。由于某种原因,MSV似乎允许您这样做。要么是一个错误,要么他们认为它是"功能",因此人们可以在任何地方喷洒typename
即可使其工作。正确的版本应为:
template<class _Ty>
struct my_decay
{
// determines decayed version of _Ty
typedef typename std::decay<_Ty>::type _Ty1;
typedef typename MyIf<
std::is_arithmetic<_Ty1>::value, _Ty1, //(1)
typename MyIf<
std::is_same<void, _Ty1>::value, _Ty1, //(2)
_Ty //(3)
>::type
>::type type;
};
此外,您应该远离标识符中使用领先的下强调。领先的下划线随后是大写字母,以及所有具有双重下划线的标识符。
相关文章:
- SFML在使用Xcode 11和macOS Catalina(zsh)编译后崩溃
- 我不能用C++编译Xcode库
- 将XCode升级到verison 11.1后,C++编译失败
- 某些C++标头在放入 Xcode 前缀/预编译标头时会中断构建
- C 11模板代码 - 无法在XCode中编译
- 尝试在终端(MacOSX)中编译两个.cpp文件(来自XCode)时"Duplicate symbol"
- XCode预编译标头中的C 语言的预处理器定义了什么?
- Xcode - 如何使用"-fexhaustive-register-search"进行编译 - 链接器崩溃需要
- C++静态库未在 Mac 上的 Xcode 中编译
- 如果标头位于预编译标头 xcode 中,则找不到默认模板参数
- 编译 c++ 代码时 xcode 上的线程
- 由于 LLVM 错误,Xcode 无法编译
- 在 xcode 中编译和链接 OpenCV 3.0.0 时出现问题
- 我可以在 Android Studio 中使用用 Xcode 编译的 C++ 静态库吗?
- 我可以在 BlackBerry 10 中使用 Xcode 编译的 armv7/armv7s .so 库吗?
- 从命令行编译时"error: expected expression",但不从 Xcode 编译时
- Xcode 编译C++代码,但 Eclipse 不会
- 使用XCode编译时期望的类名与类名相同的c++
- Xcode:编译而不运行
- 通过xcode编译我的代码在OSX中使用mongodb c驱动程序