bench/BenchTimer.h (31) syntax error: 'volatile'

bench/BenchTimer.h (31) syntax error: 'volatile'

你能帮我解决 Eigen 中这个令人震惊的错误吗? "bench/BenchTimer.h (31) syntax error: 'volatile'"

违规代码:bench/BenchTimer.h

static void escape(void *p) {
  asm volatile("" : : "g"(p) : "memory");
}

static void clobber() {
  asm volatile("" : : : "memory");
}

我的代码:tests.cpp

    #include <iostream>
    #include <bench/BenchTimer.h>

    int main() {
            Eigen::BenchTimer t;
            t.reset(); t.start();

            //TestEigenSolveSpeed();

            t.stop();
            std::cout << t.value()  << std::endl;

            return 0;
    }

CMakeLists.txt

    cmake_minimum_required(VERSION 3.11)

    set(LEVELING_NAME test-eigen)

    project(${LEVELING_NAME})

    add_executable(${LEVELING_NAME} tests.cpp )

    target_include_directories(${LEVELING_NAME} PUBLIC
            ${CMAKE_CURRENT_LIST_DIR}/deps/eigen-master 
    )

文件夹结构:

    /
    |
    -- CMakeLists.txt
    -- tests.cpp
    -- deps
       |
       -- eigen-master

创建解决方案: cmake . -DCMAKE_GENERATOR_PLATFORM=x64 -B build

在Windows中,在VS2017中

最新存储库版本:主版本 3.3.3

为了便于复制,这是三个文件加上存储库的压缩包:https://www.dropbox.com/s/avpfbabo4l9ti5h/test-eigen-error-volatile.zip?dl=0

正如 ggael 所提到的,解决方案是注释两个有问题的代码行:

static void escape(void *p) {
  //asm volatile("" : : "g"(p) : "memory");
}

static void clobber() {
  //asm volatile("" : : : "memory");
}

这个 "volatile" 似乎 supported/accepted MSVS2017

然而,它已经被 ggael 在最新版本的存储库中修复:)