小编Jon*_*anN的帖子

允许在constexpr函数中进行函数指针比较吗?

假设我有一个constexpr函数指针数组,我想编写一个constexpr函数来查找指定函数的数组索引.

我可能有这样的代码:

void test1(){}void test2(){}void test3(){}void test4(){}

typedef void(*func)(void);
constexpr func funcs[] = { &test1, &test2, &test3 };

constexpr int FindMatchingIdx (const func work, const int idx) {
    return (work == funcs[idx]) ? (idx) : (FindMatchingIdx(work, idx + 1));
}

constexpr unsigned int loc = FindMatchingIdx (&test1,0);
Run Code Online (Sandbox Code Playgroud)

现在这个代码在Clang和MSVC上编译,但是GCC只会FindMatchingIdx在使用数组中的第一个元素调用时进行编译.如果FindMatchingIdx调用test1,GCC将编译代码,但如果FindMatchingIdx调用,test2或test3GCC将无法编译代码,给出错误消息:

错误:'(test1!= test2)'不是常量表达式.

如果FindMatchingIdx必须递归,GCC将无法将其视为constexpr功能.这是GCC中的错误吗?函数指针比较如何在constexpr函数内部工作?显然,它不能使用由链接器分配的实际指针值.

工作示例:https://godbolt.org/g/xfv1PM

c++ language-lawyer constexpr c++11 c++14

13
推荐指数
1
解决办法
447
查看次数

Visual Studio 2012行号/概述天沟丢失

从代码显示器左侧运行的排水沟已经从我安装的visual studio 2012中消失了.Bellow是我当前安装的图片,它缺少排水沟,绿色边框中的插图是从VM正常工作的安装.我今天卸载并重新安装; 我删除了两个AppData\Local\Microsoft\VisualStudio\11.0&的内容AppData\Roaming\Microsoft\VisualStudio\11.0; 我已经删除了HKCU/software/Microsoft/VisualStudio/11.0&的整个reg树,HKLM/software/Microsoft/VisualStudio/11.0并尝试devenv使用/rootsuffix开关设置为test1,test2等运行,以使其从不同的注册表/ appdata位置运行.我在选项 - >文本编辑器 - > C# - >高级中选中了"打开文件时输入大纲模式"选项.

如果我创建一个C++应用程序,也会丢失装订线.

我已经完全干了,任何想法我怎么可能得到它?

截图:

在此输入图像描述

visual-studio visual-studio-2012

8
推荐指数
3
解决办法
6741
查看次数