Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

C++11 enabled BOOST_SCOPE_EXIT fails to compile with gcc 4.8.5

オープン
#7 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
cpp
領域
backend

調査の方向性

まず、gcc 4.8.5 と scope_exit.cpp のサンプルを使って、報告されたコマンドを再現します。次に、boost/scope_exit.hpp 内の関連するマクロ展開を追跡し、BOOST_SCOPE_EXIT(&) 周辺のプリプロセッサの失敗に焦点を当てます。提供された C++11 の例が報告されたツールチェーンで正常にコンパイルできれば完了です。

索引モデルが issue の本文から書いたものです。

説明

#define BOOST_SCOPE_EXIT_CONFIG_USE_LAMBDAS
#include <boost/scope_exit.hpp>

int main() {
    int test = 1;
    BOOST_SCOPE_EXIT(&) {
        test = 2;
    };
}

g++ scope_exit.cpp -std=c++11 -Iboost_1_68_0 produces following error for program above:

In file included from boost_1_68_0/boost/mpl/aux_/integral_wrapper.hpp:22:0,
                 from boost_1_68_0/boost/mpl/int.hpp:20,
                 from boost_1_68_0/boost/mpl/lambda_fwd.hpp:23,
                 from boost_1_68_0/boost/mpl/aux_/na_spec.hpp:18,
                 from boost_1_68_0/boost/mpl/not.hpp:20,
                 from boost_1_68_0/boost/mpl/assert.hpp:17,
                 from boost_1_68_0/boost/scope_exit.hpp:15,
                 from scope_exit.cpp:2:
scope_exit.cpp:6:22: error: pasting "&" and "_BOOST_SCOPE_EXIT_AUX_PP_KEYWORD_VOID_IS" does not give a valid preprocessing token
     BOOST_SCOPE_EXIT(&) {
                      ^
boost_1_68_0/boost/preprocessor/cat.hpp:29:34: note: in definition of macro 'BOOST_PP_CAT_I'
 #    define BOOST_PP_CAT_I(a, b) a ## b
                                  ^
boost_1_68_0/boost/scope_exit.hpp:85:23: note: in expansion of macro 'BOOST_PP_CAT'
     BOOST_PP_IS_UNARY(BOOST_PP_CAT(token, checking_postfix))
                       ^
boost_1_68_0/boost/scope_exit.hpp:92:5: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_KEYWORD_IS_BACK_'
     BOOST_SCOPE_EXIT_AUX_PP_KEYWORD_IS_BACK_(token, \
     ^
boost_1_68_0/boost/scope_exit.hpp:111:18: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_KEYWORD_IS_VOID_BACK'
     BOOST_PP_IIF(is_void_macro(token), \
                  ^
boost_1_68_0/boost/preprocessor/control/iif.hpp:31:31: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST_HANDLE_VOID_'
 # define BOOST_PP_IIF_0(t, f) f
                               ^
boost_1_68_0/boost/preprocessor/control/iif.hpp:32:31: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST_HANDLE_SEQ_'
 # define BOOST_PP_IIF_1(t, f) t
                               ^
boost_1_68_0/boost/scope_exit.hpp:177:5: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST_'
     BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST_( \
     ^
boost_1_68_0/boost/scope_exit.hpp:893:25: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST'
                         BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST(__VA_ARGS__)))
                         ^
boost_1_68_0/boost/scope_exit.hpp:899:9: note: in expansion of macro 'BOOST_SCOPE_EXIT_ID'
         BOOST_SCOPE_EXIT_ID(BOOST_SCOPE_EXIT_AUX_PP_LINE_COUNTER, \
         ^
scope_exit.cpp:6:5: note: in expansion of macro 'BOOST_SCOPE_EXIT'
     BOOST_SCOPE_EXIT(&) {
     ^
scope_exit.cpp:6:22: error: pasting "&" and "BOOST_SCOPE_EXIT_AUX_PP_KEYWORD_THISUNDERSCORE_IS" does not give a valid preprocessing token
     BOOST_SCOPE_EXIT(&) {
                      ^
boost_1_68_0/boost/preprocessor/cat.hpp:29:34: note: in definition of macro 'BOOST_PP_CAT_I'
 #    define BOOST_PP_CAT_I(a, b) a ## b
                                  ^
boost_1_68_0/boost/scope_exit.hpp:85:23: note: in expansion of macro 'BOOST_PP_CAT'
     BOOST_PP_IS_UNARY(BOOST_PP_CAT(token, checking_postfix))
                       ^
boost_1_68_0/boost/scope_exit.hpp:88:5: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_KEYWORD_IS_BACK_'
     BOOST_SCOPE_EXIT_AUX_PP_KEYWORD_IS_BACK_(token, \
     ^
boost_1_68_0/boost/scope_exit.hpp:667:18: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_KEYWORD_IS_THISUNDERSCORE_BACK'
     BOOST_PP_IIF(BOOST_SCOPE_EXIT_AUX_PP_KEYWORD_IS_THISUNDERSCORE_BACK(\
                  ^
boost_1_68_0/boost/preprocessor/control/expr_iif.hpp:29:36: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_TRAITS_OP'
 # define BOOST_PP_EXPR_IIF_1(expr) expr
                                    ^
boost_1_68_0/boost/preprocessor/list/adt.hpp:35:41: note: in expansion of macro 'BOOST_PP_LIST_FIRST_I'
 #    define BOOST_PP_LIST_FIRST_D(list) BOOST_PP_LIST_FIRST_I list
                                         ^
boost_1_68_0/boost/preprocessor/list/adt.hpp:32:36: note: in expansion of macro 'BOOST_PP_LIST_FIRST_D'
 # define BOOST_PP_LIST_FIRST(list) BOOST_PP_LIST_FIRST_D(list)
                                    ^
boost_1_68_0/boost/preprocessor/list/detail/fold_left.hpp:22:191: note: in expansion of macro 'BOOST_PP_LIST_FIRST'
 # define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
                                                                                                                                                                                               ^
boost_1_68_0/boost/preprocessor/cat.hpp:29:34: note: in expansion of macro 'BOOST_PP_LIST_FOLD_LEFT_1'
 #    define BOOST_PP_CAT_I(a, b) a ## b
                                  ^
boost_1_68_0/boost/scope_exit.hpp:892:17: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_TRAITS'
                 BOOST_SCOPE_EXIT_AUX_TRAITS( \
                 ^
boost_1_68_0/boost/preprocessor/control/iif.hpp:25:39: note: in expansion of macro 'BOOST_PP_IIF_0'
 #    define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_ ## bit(t, f)
                                       ^
boost_1_68_0/boost/preprocessor/control/iif.hpp:18:37: note: in expansion of macro 'BOOST_PP_IIF_I'
 #    define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_I(bit, t, f)
                                     ^
boost_1_68_0/boost/scope_exit.hpp:111:5: note: in expansion of macro 'BOOST_PP_IIF'
     BOOST_PP_IIF(is_void_macro(token), \
     ^
boost_1_68_0/boost/preprocessor/control/iif.hpp:31:31: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST_HANDLE_VOID_'
 # define BOOST_PP_IIF_0(t, f) f
                               ^
boost_1_68_0/boost/preprocessor/control/iif.hpp:32:31: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST_HANDLE_SEQ_'
 # define BOOST_PP_IIF_1(t, f) t
                               ^
boost_1_68_0/boost/scope_exit.hpp:177:5: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST_'
     BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST_( \
     ^
boost_1_68_0/boost/scope_exit.hpp:893:25: note: in expansion of macro 'BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST'
                         BOOST_SCOPE_EXIT_AUX_PP_VOID_LIST(__VA_ARGS__)))
                         ^
boost_1_68_0/boost/scope_exit.hpp:899:9: note: in expansion of macro 'BOOST_SCOPE_EXIT_ID'
         BOOST_SCOPE_EXIT_ID(BOOST_SCOPE_EXIT_AUX_PP_LINE_COUNTER, \
         ^
scope_exit.cpp:6:5: note: in expansion of macro 'BOOST_SCOPE_EXIT'
     BOOST_SCOPE_EXIT(&) {
主要言語
C++
スター
17
フォーク
34
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

boostorg/scope_exit のほかの issue

boostorg/scope_exit の issue をすべて見る

似ている issue

C++ の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。