diff --git a/googlemock/include/gmock/gmock-actions.h b/googlemock/include/gmock/gmock-actions.h index d934dc9c..cdff6949 100644 --- a/googlemock/include/gmock/gmock-actions.h +++ b/googlemock/include/gmock/gmock-actions.h @@ -1637,6 +1637,9 @@ auto InvokeArgument(F f, Args... args) -> decltype(f(args...)) { \ public: \ using base_type::base_type; \ + name##Action() = default; \ + /* Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82134 */ \ + name##Action(const name##Action&) { } \ template \ class gmock_Impl : public ::testing::ActionInterface { \ public: \ @@ -1654,6 +1657,7 @@ auto InvokeArgument(F f, Args... args) -> decltype(f(args...)) { return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \ }; \ }; \ + inline name##Action name() GTEST_MUST_USE_RESULT_; \ inline name##Action name() { return name##Action(); } \ template \ template \ diff --git a/googlemock/include/gmock/gmock-generated-actions.h b/googlemock/include/gmock/gmock-generated-actions.h index ccae6110..124bd011 100644 --- a/googlemock/include/gmock/gmock-generated-actions.h +++ b/googlemock/include/gmock/gmock-generated-actions.h @@ -294,6 +294,20 @@ p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8)), \ p9(::std::move(gmock_p9)) +// Defines the copy constructor +#define GMOCK_INTERNAL_DEFN_COPY_AND_0_VALUE_PARAMS() \ + {} // Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82134 +#define GMOCK_INTERNAL_DEFN_COPY_AND_1_VALUE_PARAMS(...) = default; +#define GMOCK_INTERNAL_DEFN_COPY_AND_2_VALUE_PARAMS(...) = default; +#define GMOCK_INTERNAL_DEFN_COPY_AND_3_VALUE_PARAMS(...) = default; +#define GMOCK_INTERNAL_DEFN_COPY_AND_4_VALUE_PARAMS(...) = default; +#define GMOCK_INTERNAL_DEFN_COPY_AND_5_VALUE_PARAMS(...) = default; +#define GMOCK_INTERNAL_DEFN_COPY_AND_6_VALUE_PARAMS(...) = default; +#define GMOCK_INTERNAL_DEFN_COPY_AND_7_VALUE_PARAMS(...) = default; +#define GMOCK_INTERNAL_DEFN_COPY_AND_8_VALUE_PARAMS(...) = default; +#define GMOCK_INTERNAL_DEFN_COPY_AND_9_VALUE_PARAMS(...) = default; +#define GMOCK_INTERNAL_DEFN_COPY_AND_10_VALUE_PARAMS(...) = default; + // Declares the fields for storing the value parameters. #define GMOCK_INTERNAL_DEFN_AND_0_VALUE_PARAMS() #define GMOCK_INTERNAL_DEFN_AND_1_VALUE_PARAMS(p0) p0##_type p0; @@ -422,6 +436,11 @@ public:\ explicit GMOCK_ACTION_CLASS_(name, value_params)\ GMOCK_INTERNAL_INIT_##value_params {}\ + GMOCK_ACTION_CLASS_(name, value_params)(\ + const GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params>&)\ + GMOCK_INTERNAL_DEFN_COPY_##value_params\ template \ class gmock_Impl : public ::testing::ActionInterface {\ public:\ @@ -444,6 +463,12 @@ }\ GMOCK_INTERNAL_DEFN_##value_params\ };\ + template \ + GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\ + GMOCK_INTERNAL_DECL_##value_params) GTEST_MUST_USE_RESULT_;\ template \ inline GMOCK_ACTION_CLASS_(name, value_params)<\ diff --git a/googlemock/include/gmock/gmock-generated-actions.h.pump b/googlemock/include/gmock/gmock-generated-actions.h.pump index 1512d72d..7a7fc9f4 100644 --- a/googlemock/include/gmock/gmock-generated-actions.h.pump +++ b/googlemock/include/gmock/gmock-generated-actions.h.pump @@ -55,7 +55,6 @@ $$}} This meta comment fixes auto-indentation in editors. $range i 0..n $range k 0..n-1 - // Sometimes you want to give an action explicit template parameters // that cannot be inferred from its value parameters. ACTION() and // ACTION_P*() don't support that. ACTION_TEMPLATE() remedies that @@ -176,6 +175,16 @@ $range j 0..i-1 ($for j, [[p$j##_type gmock_p$j]])$if i>0 [[ : ]]$for j, [[p$j(::std::move(gmock_p$j))]] +]] + +// Defines the copy constructor + +$for i [[ +#define GMOCK_INTERNAL_DEFN_COPY_AND_$i[[]]_VALUE_PARAMS$if i == 0[[() \ + {} // Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82134 +]] $else [[(...) = default;]] + + ]] // Declares the fields for storing the value parameters. @@ -241,6 +250,11 @@ $range k 0..n-1 public:\ explicit GMOCK_ACTION_CLASS_(name, value_params)\ GMOCK_INTERNAL_INIT_##value_params {}\ + GMOCK_ACTION_CLASS_(name, value_params)(\ + const GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params>&)\ + GMOCK_INTERNAL_DEFN_COPY_##value_params\ template \ class gmock_Impl : public ::testing::ActionInterface {\ public:\ @@ -263,6 +277,12 @@ $range k 0..n-1 }\ GMOCK_INTERNAL_DEFN_##value_params\ };\ + template \ + GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\ + GMOCK_INTERNAL_DECL_##value_params) GTEST_MUST_USE_RESULT_;\ template \ inline GMOCK_ACTION_CLASS_(name, value_params)<\