Просмотр исходного кода

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

Co-authored-by: Geoff Romer <gromer@google.com>
Jon Meow 4 лет назад
Родитель
Сommit
7beaabc934
1 измененных файлов с 8 добавлено и 0 удалено
  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_