Quellcode durchsuchen

Prevent ostream << for pointers to printable types. (#837)

Co-authored-by: Geoff Romer <gromer@google.com>
Jon Meow vor 4 Jahren
Ursprung
Commit
7beaabc934
1 geänderte Dateien mit 8 neuen und 0 gelöschten Zeilen
  1. 8 0
      common/ostream.h

+ 8 - 0
common/ostream.h

@@ -18,6 +18,14 @@ auto operator<<(llvm::raw_ostream& out, const T& obj) -> llvm::raw_ostream& {
   return out;
 }
 
+// Prevents ostream << for pointers to printable types.
+template <typename T, typename std::enable_if<std::is_member_function_pointer<
+                          decltype(&T::Print)>::value>::type* = nullptr>
+__attribute__((unavailable(
+    "Received a pointer to a printable type, are you missing a `*`? "
+    "To print as a pointer, cast to void*."))) auto
+operator<<(llvm::raw_ostream& out, const T* /*obj*/) -> llvm::raw_ostream&;
+
 }  // namespace Carbon
 
 #endif  // COMMON_OSTREAM_H_