小编Zel*_*ron的帖子

C++ MSVC/GCC/Clang编译器错误

我从标题中发现了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)

c++ gcc clang visual-c++ c++11

2
推荐指数
1
解决办法
226
查看次数

GCC非法指令

当我编译这段代码时:

#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.我该如何解决?

c++ gcc

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

标签 统计

c++ ×2

gcc ×2

c++11 ×1

clang ×1

visual-c++ ×1