- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑以下代码:
template <class T, class U, class V>
struct Foo { };
template <class T, class U>
struct Foo<T, U, std::integral_constant<int, U::value>> {
static void print()
{
std::cerr << "instantiated";
}
};
template <class U>
struct Foo<double, U, std::integral_constant<int, U::value>> {
static void print()
{
std::cerr << "instantiated special";
}
};
struct Bar {
static const int value = 0;
};
int main(int argc, char ** argv)
{
using Baz = Foo<double, Bar, std::integral_constant<int, 0>>;
Baz::print();
return 0;
}
当我使用 icc 16.0.1 编译它时,我收到以下消息:
main.cpp(38): error: more than one partial specialization matches the template argument list of class "Foo<double, Bar, std::integral_constant<int, 0>>"
"Foo<T, U, std::integral_constant<int, U::value>>"
"Foo<double, U, std::integral_constant<int, U::value>>"
Baz::print();
使用 clang 3.7.1 和 gcc 5.3.0 编译(并打印“instantiated special”)。这是 icc 中的错误,还是我的代码不正确?在我看来,第二个专业比第一个更专业。除了锁定第一个模板参数之外,它与第一个相同。
编辑:我应该补充:如果这是 icc 中的错误,是否有好的解决方法?
最佳答案
是的,这是 ICC 中的错误。
两个部分特化都与您的实现相匹配,因此进入两个合成函数的部分模板排序规则:
template <class T, class U> void f(Foo<T, U, std::integral_constant<int, U::value> );
template <class U> void f(Foo<double, U, std::integral_constant<int, U::value> );
部分排序规则涉及为每个模板参数合成新类型,并尝试对每个重载对其余部分进行推导。首先,我们尝试推断U
反对Foo<_U1, _U2, std::integral_constant<int, _U2::value>>
.这失败了,因为 _U1
不匹配 double
.所以第一个重载至少没有第二个重载那么专业。接下来,我们尝试推断T
和 U
反对Foo<double, _U3, std::integral_constant<int, _U3::value>>
. T=double
成功和 U=_U3
.所以第二个重载至少和第一个一样专业。
因此,第二个重载比第一个更专业。有一个独特的最专业的局部化,它应该被实例化(并且由 gcc 和 clang 实例化)。 ICC 未能这样做是一个错误。
关于c++ - 部分模板特化和 icc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37216212/
我没有 icc已安装,但我需要所有编译器优化标志的列表。我试过谷歌并搜索他们的网站文档,但我找不到任何东西。 我找到了一个列表 all编译器选项,但我只需要优化选项。 最佳答案 此页面列出了 IC 优
我使用的是 ubuntu 14.04。我刚刚下载并安装了英特尔并行工作室 2016。 如果我不是从 icc 文件夹中输入 icc,则会收到错误命令未找到。有没有办法像 gcc 一样设置 icc(在我运
我最近开始使用 ICC (18.0.1.126) 来编译一段代码,该代码可以在任意优化设置上与 GCC 和 Clang 一起正常工作。该代码包含一个汇编例程,该例程使用 AVX2 和 FMA 指令将
我的问题是我想从命令行调用 icc 编译器,但我的电脑找不到它。我已经安装了最新的 oneAPI 并获取了 setvars.sh。 即使我在安装例程下搜索'icc'文件我也找不到icc编译器文件。 '
使用 ICC 编译时,每条指令后面都是 2 个点分隔的数字,并以哈希符号为前缀。这是什么意思? For example: L__routine_start__Z12testFunctionPii_0:
有人可以解释为什么 icc 在下面的代码 1 中没有执行循环不变代码运动(移动 a 的指针赋值)的原因。当 a 指针赋值从代码 2 中完成的 t6 循环中移出时,我看到性能提高了 40%。我尝试将指针
考虑以下代码: template struct Foo { }; template struct Foo> { static void print() { std::cerr s
我在 Visual Studio 2012 中使用 Intel C++ 13.0.1.119 Build 20121008 for IA-32 在 Windows 上运行。我一直遇到链接器错误问题,并
我一直在尝试使用英特尔的四精度 float 。我有以下代码,它返回了意外的结果。 #include #include int print(const char *label, _Quad r) {
我写了一个应用程序,它通过 ImageMagick 修剪和调整一堆图像的大小。图像也被转换为灰度。但是当我尝试在 Photoshop CC 中打开转换后的图像时,会出现以下警告: The embedd
我正在用 icc 编译一个 cpp 代码(在 ubuntu 下): icc -I/usr/share/R/include -I/~/Desktop/work/p1/geqw4/vi3/out/sp/c
首先让我说我是 R 的新手,并试图弄清楚如何在我的特定数据集上运行 icc,这可能与正常情况下有点不同。 数据集如下所示 +------------+------------------+------
我遇到了 icc 问题,到目前为止我还没有找到任何解决方案。我的程序用gcc编译时运行正常,但用icc编译时显然没有执行任何操作。不会发生运行时错误。该程序结束得非常快(几毫秒),但预计需要几秒钟(对
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
在尝试使用 Jasper Reports 生成符合 PDF/A 标准的 PDF 时,我得到了 net.sf.jasperreports.engine.util.JRPdfaIccProfileNotF
因此,当使用基本的icc bob.cpp -o bob 编译并运行时,出现以下代码段错误: #include int foo () { return 6; } int main() { st
现在我正在使用 icc 来编译和运行我的 ANSI C 代码。 当我打开-O2 优化时,一切正常。但是,当我更改为 -fast 时,结果会有所不同(有很多 nan)。 我搜索并尝试,发现错误存在于-x
我想报告一个有趣的错误。下面的这段代码应该打印出 20 次“1.0”。相反,在我的 mac(雪豹 10.6.8)上使用 icc(11.1)编译时,我得到不稳定的值(16 次“0.0”然后 4 次“1.
有没有办法在使用英特尔编译器时改变缓存写入策略。我发现 Intel Core i7 处理器的一级缓存是回写缓存。 我的问题是:是否有任何可能的方法来调整编译器,将缓存策略从回写更改为直写? 最佳答案
我目前在 centos7 上校准显示器时遇到问题。使用 gnome 或 kde,我无法正确使用颜色设置来应用新创建的 ICC 配置文件。设备选项卡未显示列出(仅安装了打印机)。 经过一些阅读,我发现
我是一名优秀的程序员,十分优秀!