@@ -36,15 +36,15 @@ class ClassDescription : public Description {
3636 this ->description = Pretty::to_word (subject);
3737 }
3838
39- ClassDescription (std::string description, Block block) : Description(description), block(block), subject(T()) {}
39+ ClassDescription (const char * description, Block block) : Description(description), block(block), subject(T()) {}
4040
4141 ClassDescription (T subject, Block block)
4242 : Description(Pretty::to_word(subject)),
4343 block (block),
4444 type(" : " + Util::demangle(typeid (T).name())),
4545 subject(subject) {}
4646
47- ClassDescription (std::string description, T subject, Block block)
47+ ClassDescription (const char * description, T subject, Block block)
4848 : Description(description), block(block), subject(subject) {}
4949
5050 ClassDescription (T &subject, Block block)
@@ -60,27 +60,25 @@ class ClassDescription : public Description {
6060 }
6161
6262 template <typename U>
63- ClassDescription (std::string description, std::initializer_list<U> init_list, Block block)
63+ ClassDescription (const char * description, std::initializer_list<U> init_list, Block block)
6464 : Description(description), block(block), subject(T(init_list)) {}
6565
66- Result it (std::string description, std::function<void (ItCD<T> &)> block);
66+ Result it (const char * description, std::function<void (ItCD<T> &)> block);
6767 Result it (std::function<void (ItCD<T> &)> block);
6868 /* * @brief an alias for it */
69- Result specify (std::string description, std::function<void (ItCD<T> &)> block) { return it (description, block); }
69+ Result specify (const char * description, std::function<void (ItCD<T> &)> block) { return it (description, block); }
7070 /* * @brief an alias for it */
7171 Result specify (std::function<void (ItCD<T> &)> block) { return it (block); }
7272
73- template <class U = std::nullptr_t >
74- Result context (std::string description, std::function< void (ClassDescription<T> &)> block);
73+ template <class U = std::nullptr_t , class B >
74+ Result context (const char * description, B block);
7575
76- template <class U >
77- Result context (std::string description, U subject, std::function<void (ClassDescription<U> &)> block);
78- template <class U >
79- Result context (std::string description, U &subject, std::function<void (ClassDescription<U> &)> block);
80- template <class U >
81- Result context (U subject, std::function<void (ClassDescription<U> &)> block);
82- template <class U >
83- Result context (U &subject, std::function<void (ClassDescription<U> &)> block);
76+ template <class U , class B >
77+ Result context (const char * description, U subject, B block);
78+ template <class U , class B >
79+ Result context (const char * description, U &subject, B block);
80+ template <class U , class B >
81+ Result context (U subject, B block);
8482
8583 Result run (Formatters::BaseFormatter &printer) override ;
8684
@@ -91,9 +89,9 @@ template <class T>
9189using ClassContext = ClassDescription<T>;
9290
9391template <class T >
94- template <class U >
95- Result ClassDescription<T>::context(std::string description, U subject,
96- std::function< void (ClassDescription<U> &)> block) {
92+ template <class U , class B >
93+ Result ClassDescription<T>::context(const char * description, U subject,
94+ B block) {
9795 ClassContext<U> context (description, subject, block);
9896 context.set_parent (this );
9997 context.ClassContext <U>::before_eaches = this ->before_eaches ;
@@ -102,15 +100,15 @@ Result ClassDescription<T>::context(std::string description, U subject,
102100}
103101
104102template <class T >
105- template <class U >
106- Result ClassDescription<T>::context(U subject, std::function< void (ClassDescription<U> &)> block) {
103+ template <class U , class B >
104+ Result ClassDescription<T>::context(U subject, B block) {
107105 return this ->context (" " , std::forward<U>(subject), block);
108106}
109107
110108template <class T >
111- template <class U >
112- Result ClassDescription<T>::context(std::string description, U &subject,
113- std::function< void (ClassDescription<U> &)> block) {
109+ template <class U , class B >
110+ Result ClassDescription<T>::context(const char * description, U &subject,
111+ B block) {
114112 ClassContext<U> context (description, subject, block);
115113 context.set_parent (this );
116114 context.ClassContext <U>::before_eaches = this ->before_eaches ;
@@ -119,28 +117,23 @@ Result ClassDescription<T>::context(std::string description, U &subject,
119117}
120118
121119template <class T >
122- template <class U >
123- Result ClassDescription<T>::context(U &subject, std::function<void (ClassDescription<U> &)> block) {
124- return this ->context (" " , std::forward<U>(subject), block);
125- }
126-
127- template <class T >
128- template <class U >
129- Result ClassDescription<T>::context(std::string description, std::function<void (ClassDescription<T> &)> block) {
120+ template <class U , class B >
121+ Result ClassDescription<T>::context(const char * description, B block) {
130122 ClassContext<T> context (description, this ->subject , block);
131123 context.set_parent (this );
132124 context.before_eaches = this ->before_eaches ;
133125 context.after_eaches = this ->after_eaches ;
134126 return context.run (this ->get_formatter ());
135127}
136128
137- template <class T >
138- Result Description::context (T subject, std::function<void (ClassDescription<T> &)> block) {
129+ template <class T , class B >
130+ requires (!std::is_same_v<T, const char *>)
131+ Result Description::context (T subject, B block) {
139132 return this ->context (" " , subject, block);
140133}
141134
142- template <class T >
143- Result Description::context (std::string description, T subject, std::function< void (ClassDescription<T> &)> block) {
135+ template <class T , class B >
136+ Result Description::context (const char * description, T subject, B block) {
144137 ClassContext<T> context (description, subject, block);
145138 context.set_parent (this );
146139 context.before_eaches = this ->before_eaches ;
@@ -179,7 +172,7 @@ Result Description::context(std::initializer_list<U> init_list, std::function<vo
179172 * @return the result of the test
180173 */
181174template <class T >
182- Result ClassDescription<T>::it(std::string name, std::function<void (ItCD<T> &)> block) {
175+ Result ClassDescription<T>::it(const char * name, std::function<void (ItCD<T> &)> block) {
183176 ItCD<T> it (*this , this ->subject , name, block);
184177 Result result = it.run (this ->get_formatter ());
185178 exec_after_eaches ();
0 commit comments