我从标题中发现了3个编译器中看起来像是一个令人头疼的错误.下面的代码使用c ++ 11和c ++ 14标准编译所有三个编译器的最新版本,即使它真的不应该因为"main"看不到"visit_detail"函数.
更正:我是愚蠢的,实际上并不是GCC/Clang中的错误,似乎是我的MSVC版本中的一个错误.
#include <utility>
#include <iostream>
#include <type_traits>
namespace bug
{
using namespace std;
using size_t = unsigned long long;
namespace detail
{
struct visit_stop_t {};
constexpr bug::detail::visit_stop_t visit_stop = bug::detail::visit_stop_t();
template <typename Visitor, typename First, typename... Tail>
void visit_detail(Visitor&& vis, First&& first, Tail&&... tail)
{
// code, not necessairy to recreate bug
}
}
template <typename Visitor, typename... Variants>
void visit(Visitor&& vis, Variants&&... vars)
{
bug::detail::visit_detail(bug::forward<Visitor>(vis), bug::forward<Variants>(vars)..., bug::detail::visit_stop);
}
template <typename Visitor>
void visit(Visitor&& vis) …Run Code Online (Sandbox Code Playgroud) 当我编译这段代码时:
#include <random>
#include <iostream>
int main(int argc, char** argv)
{
std::random_device dev;
std::mt19937 mt(dev());
std::cout << mt() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后尝试运行生成的可执行文件,gdb我收到此错误:
程序收到信号
SIGILL,非法指令.std::(anonymous namespace)::__x86_rdrand ()在/build/gcc/src/gcc/libstdc++-v3/src/c++11/random.cc:69 69 /build/gcc/src/gcc/libstdc++-v3/src/c++11/random.cc : 没有相应的文件和目录.
我使用带有Intel Core 2 Duo CPU T8100的arch linux.我该如何解决?