@@ -186,6 +186,24 @@ struct resolve_size {
186186 operator const T &() const ;
187187};
188188
189+ template <std::size_t , class T >
190+ using resolve_size_t = resolve_size<T>;
191+
192+ template <class TParent >
193+ struct resolve_creatable {
194+ template <class T , GUNIT_REQUIRES(!is_copy_ctor<TParent, T>::value && detail::is_abstract<deref_t <T>>::value)>
195+ operator T ();
196+
197+ template <class T , GUNIT_REQUIRES(!is_copy_ctor<TParent, T>::value && detail::is_abstract<deref_t <T>>::value)>
198+ operator T &() const ;
199+
200+ template <class T , GUNIT_REQUIRES(!is_copy_ctor<TParent, T>::value && detail::is_abstract<deref_t <T>>::value)>
201+ operator const T &() const ;
202+ };
203+
204+ template <std::size_t , class T >
205+ using resolve_creatable_t = resolve_creatable<T>;
206+
189207template <class TParent , template <class > class TMock , class TArgs = std::tuple<>>
190208class resolve {
191209 public:
@@ -254,9 +272,6 @@ class resolve {
254272template <std::size_t , class T , template <class > class TMock , class TArgs = std::tuple<>>
255273using resolve_t = resolve<T, TMock, TArgs>;
256274
257- template <std::size_t , class T >
258- using resolve_size_t = resolve_size<T>;
259-
260275template <class , class = std::make_index_sequence<GUNIT_MAX_CTOR_SIZE>>
261276struct ctor_size ;
262277
@@ -284,7 +299,16 @@ auto make_impl(detail::identity<T>, mocks_t &mocks, std::tuple<TArgs...> &args,
284299 return T (resolve_t <Ns, detail::deref_t <T>, TMock, std::tuple<TArgs...>>{mocks, args}...);
285300}
286301
287- } // detail
302+ template <class , class >
303+ struct is_creatable_impl ;
304+
305+ template <class T , std::size_t ... Ns>
306+ struct is_creatable_impl <T, std::index_sequence<Ns...>> : std::is_constructible<T, resolve_creatable_t <Ns, T>...> {};
307+
308+ template <class T >
309+ using is_creatable = is_creatable_impl<T, std::make_index_sequence<ctor_size<T>::value>>;
310+
311+ } // detail
288312
289313template <class T , class ... TArgs>
290314auto make (TArgs &&... args) {
0 commit comments