Синтаксическая ошибка bench / BenchTimer.h (31): 'volatile' - PullRequest
0 голосов
/ 23 января 2019

Не могли бы вы помочь мне с этой изумительной ошибкой в ​​Эйгене?«Синтаксическая ошибка bench / BenchTimer.h (31):« 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

1 Ответ

0 голосов
/ 24 января 2019

Как уже упоминал ggael, решение комментирует две строки кода:

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

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

MSVS2017 не поддерживает и не воспринимает это «изменчивое» значение

Однако он уже исправлен ggael в последней версии хранилища:)

...