OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef BASE_LOGGING_H_ | 5 #ifndef BASE_LOGGING_H_ |
6 #define BASE_LOGGING_H_ | 6 #define BASE_LOGGING_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 | 9 |
10 #include <cassert> | 10 #include <cassert> |
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 ; \ | 520 ; \ |
521 else \ | 521 else \ |
522 ::logging::LogMessage(__FILE__, __LINE__, true_if_passed.message()).stream() | 522 ::logging::LogMessage(__FILE__, __LINE__, true_if_passed.message()).stream() |
523 | 523 |
524 #endif // !(OFFICIAL_BUILD && NDEBUG) | 524 #endif // !(OFFICIAL_BUILD && NDEBUG) |
525 | 525 |
526 // This formats a value for a failing CHECK_XX statement. Ordinarily, | 526 // This formats a value for a failing CHECK_XX statement. Ordinarily, |
527 // it uses the definition for operator<<, with a few special cases below. | 527 // it uses the definition for operator<<, with a few special cases below. |
528 template <typename T> | 528 template <typename T> |
529 inline typename std::enable_if< | 529 inline typename std::enable_if< |
530 base::internal::SupportsOstreamOperator<const T&>::value, | 530 base::internal::SupportsOstreamOperator<const T&>::value && |
| 531 !std::is_function<typename std::remove_pointer<T>::type>::value, |
531 void>::type | 532 void>::type |
532 MakeCheckOpValueString(std::ostream* os, const T& v) { | 533 MakeCheckOpValueString(std::ostream* os, const T& v) { |
533 (*os) << v; | 534 (*os) << v; |
534 } | 535 } |
535 | 536 |
| 537 // Provide an overload for functions and function pointers. Function pointers |
| 538 // don't implicitly convert to void* but do implicitly convert to bool, so |
| 539 // without this function pointers are always printed as 1 or 0. (MSVC isn't |
| 540 // standards-conforming here and converts function pointers to regular |
| 541 // pointers, so this is a no-op for MSVC.) |
| 542 template <typename T> |
| 543 inline typename std::enable_if< |
| 544 std::is_function<typename std::remove_pointer<T>::type>::value, |
| 545 void>::type |
| 546 MakeCheckOpValueString(std::ostream* os, const T& v) { |
| 547 (*os) << reinterpret_cast<const void*>(v); |
| 548 } |
| 549 |
536 // We need overloads for enums that don't support operator<<. | 550 // We need overloads for enums that don't support operator<<. |
537 // (i.e. scoped enums where no operator<< overload was declared). | 551 // (i.e. scoped enums where no operator<< overload was declared). |
538 template <typename T> | 552 template <typename T> |
539 inline typename std::enable_if< | 553 inline typename std::enable_if< |
540 !base::internal::SupportsOstreamOperator<const T&>::value && | 554 !base::internal::SupportsOstreamOperator<const T&>::value && |
541 std::is_enum<T>::value, | 555 std::is_enum<T>::value, |
542 void>::type | 556 void>::type |
543 MakeCheckOpValueString(std::ostream* os, const T& v) { | 557 MakeCheckOpValueString(std::ostream* os, const T& v) { |
544 (*os) << static_cast<typename base::underlying_type<T>::type>(v); | 558 (*os) << static_cast<typename base::underlying_type<T>::type>(v); |
545 } | 559 } |
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
988 #elif NOTIMPLEMENTED_POLICY == 5 | 1002 #elif NOTIMPLEMENTED_POLICY == 5 |
989 #define NOTIMPLEMENTED() do {\ | 1003 #define NOTIMPLEMENTED() do {\ |
990 static bool logged_once = false;\ | 1004 static bool logged_once = false;\ |
991 LOG_IF(ERROR, !logged_once) << NOTIMPLEMENTED_MSG;\ | 1005 LOG_IF(ERROR, !logged_once) << NOTIMPLEMENTED_MSG;\ |
992 logged_once = true;\ | 1006 logged_once = true;\ |
993 } while(0);\ | 1007 } while(0);\ |
994 EAT_STREAM_PARAMETERS | 1008 EAT_STREAM_PARAMETERS |
995 #endif | 1009 #endif |
996 | 1010 |
997 #endif // BASE_LOGGING_H_ | 1011 #endif // BASE_LOGGING_H_ |
OLD | NEW |