Closed kou closed 6 years ago
Ruby 2.6.0-preview1 で再現した。
↓のマクロ定義の分岐が #define RUBY_ALIGNOF alignof
に行くはずなのに #define RUBY_ALIGNOF _Alignof
に行ってしまっているっぽい。
C++ のソースがCのソースとして処理されてしまっている様子。
#ifdef RUBY_ALIGNOF
/* OK, take that definition */
#elif defined(__cplusplus) && (__cplusplus >= 201103L)
#define RUBY_ALIGNOF alignof
#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
#define RUBY_ALIGNOF _Alignof
#else
#define RUBY_ALIGNOF(type) ((size_t)offsetof(struct { char f1; type f2; }, f2))
#endif
gcc -I $HOME/.rbenv/versions/2.6.0-preview1/include/ruby-2.6.0/ -I$HOME/.rbenv/versions/2.6.0-preview1/include/ruby-2.6.0/x86_64-linux/ -I. -dM -E -x c++ -std=c++11 nmatrix.cpp | sort | lv
でマクロを展開してみると、以下のようになっていた。
#define RUBY_ALIGNOF _Alignof
#define __cplusplus 201103L
Rubyのバージョンを変えるとビルドできるのでRubyの方で質問してみた。
https://github.com/SciRuby/nmatrix