38#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_ASSERTION_RESULT_H_
39#define GOOGLETEST_INCLUDE_GTEST_GTEST_ASSERTION_RESULT_H_
46#include "gtest/gtest-message.h"
47#include "gtest/internal/gtest-port.h"
49GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \
133class GTEST_API_ AssertionResult {
137 AssertionResult(
const AssertionResult& other);
143#if defined(_MSC_VER) && (_MSC_VER < 1910 || _MSC_VER >= 1920)
144 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 )
154 template <
typename T>
155 explicit AssertionResult(
157 typename std::enable_if<
158 !std::is_convertible<T, AssertionResult>::value>::type*
161 : success_(success) {}
163#if defined(_MSC_VER) && (_MSC_VER < 1910 || _MSC_VER >= 1920)
164 GTEST_DISABLE_MSC_WARNINGS_POP_()
168 AssertionResult& operator=(AssertionResult other) {
174 operator bool()
const {
return success_; }
177 AssertionResult operator!()
const;
183 const char* message()
const {
184 return message_.get() !=
nullptr ? message_->c_str() :
"";
187 const char* failure_message()
const {
return message(); }
190 template <
typename T>
191 AssertionResult& operator<<(
const T& value) {
192 AppendMessage(Message() << value);
198 AssertionResult& operator<<(
199 ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) {
200 AppendMessage(Message() << basic_manipulator);
206 void AppendMessage(
const Message& a_message) {
207 if (message_.get() ==
nullptr) message_.reset(new ::std::string);
208 message_->append(a_message.GetString().c_str());
212 void swap(AssertionResult& other);
220 std::unique_ptr< ::std::string> message_;
224GTEST_API_ AssertionResult AssertionSuccess();
227GTEST_API_ AssertionResult AssertionFailure();
231GTEST_API_ AssertionResult AssertionFailure(
const Message& msg);
235GTEST_DISABLE_MSC_WARNINGS_POP_()