diff --git a/src/systemc/core/sc_spawn.cc b/src/systemc/core/sc_spawn.cc index 4618ea8c24..ed7f2f22b5 100644 --- a/src/systemc/core/sc_spawn.cc +++ b/src/systemc/core/sc_spawn.cc @@ -224,18 +224,3 @@ sc_spawn_options::async_reset_signal_is( } } // namespace sc_core - -namespace sc_unnamed -{ - -ImplementationDefined _1; -ImplementationDefined _2; -ImplementationDefined _3; -ImplementationDefined _4; -ImplementationDefined _5; -ImplementationDefined _6; -ImplementationDefined _7; -ImplementationDefined _8; -ImplementationDefined _9; - -} // namespace sc_unnamed diff --git a/src/systemc/ext/core/sc_spawn.hh b/src/systemc/ext/core/sc_spawn.hh index 50378e23da..a37e48206c 100644 --- a/src/systemc/ext/core/sc_spawn.hh +++ b/src/systemc/ext/core/sc_spawn.hh @@ -30,6 +30,7 @@ #ifndef __SYSTEMC_EXT_CORE_SC_SPAWN_HH__ #define __SYSTEMC_EXT_CORE_SC_SPAWN_HH__ +#include #include #include "sc_join.hh" @@ -173,10 +174,6 @@ sc_spawn(typename T::result_type *r_p, T object, const char *name_p=nullptr, return sc_process_handle() = p; } -#define sc_bind boost::bind -#define sc_ref(r) boost::ref(r) -#define sc_cref(r) boost::cref(r) - #define SC_FORK \ { \ ::sc_core::sc_process_handle forkees[] = { @@ -198,22 +195,38 @@ sc_spawn(typename T::result_type *r_p, T object, const char *name_p=nullptr, join.wait_clocked(); \ } +// This avoids boost introduces a dependency on c++11. If that's a problem, +// we could imitate Accellera and pick which one to use on the fly. + +template +auto sc_bind(F &&f, Args && ...args) -> + decltype(std::bind(std::forward(f), std::forward(args)...)) +{ + return std::bind(std::forward(f), std::forward(args)...); +} + +template +auto sc_ref(T &&v) -> decltype(std::ref(std::forward(v))) +{ + return std::ref(std::forward(v)); +} + +template +auto sc_cref(T &&v) -> decltype(std::cref(std::forward(v))) +{ + return std::cref(std::forward(v)); +} } // namespace sc_core +using sc_core::sc_bind; +using sc_core::sc_ref; +using sc_core::sc_cref; + namespace sc_unnamed { -typedef int ImplementationDefined; -extern ImplementationDefined _1; -extern ImplementationDefined _2; -extern ImplementationDefined _3; -extern ImplementationDefined _4; -extern ImplementationDefined _5; -extern ImplementationDefined _6; -extern ImplementationDefined _7; -extern ImplementationDefined _8; -extern ImplementationDefined _9; +using namespace std::placeholders; } // namespace sc_unnamed