Index: dbus/property.h |
diff --git a/dbus/property.h b/dbus/property.h |
index 5f36d69fdeaa2479c1d60d063e231b0a7a9607b1..b308c8218a4d2cad8447bf7a93d74b336d556761 100644 |
--- a/dbus/property.h |
+++ b/dbus/property.h |
@@ -426,101 +426,168 @@ class CHROME_DBUS_EXPORT Property : public PropertyBase { |
T set_value_; |
}; |
-template <> Property<uint8>::Property(); |
-template <> bool Property<uint8>::PopValueFromReader(MessageReader* reader); |
-template <> void Property<uint8>::AppendSetValueToWriter(MessageWriter* writer); |
-extern template class Property<uint8>; |
- |
-template <> Property<bool>::Property(); |
-template <> bool Property<bool>::PopValueFromReader(MessageReader* reader); |
-template <> void Property<bool>::AppendSetValueToWriter(MessageWriter* writer); |
-extern template class Property<bool>; |
- |
-template <> Property<int16>::Property(); |
-template <> bool Property<int16>::PopValueFromReader(MessageReader* reader); |
-template <> void Property<int16>::AppendSetValueToWriter(MessageWriter* writer); |
-extern template class Property<int16>; |
- |
-template <> Property<uint16>::Property(); |
-template <> bool Property<uint16>::PopValueFromReader(MessageReader* reader); |
-template <> void Property<uint16>::AppendSetValueToWriter( |
- MessageWriter* writer); |
-extern template class Property<uint16>; |
- |
-template <> Property<int32>::Property(); |
-template <> bool Property<int32>::PopValueFromReader(MessageReader* reader); |
-template <> void Property<int32>::AppendSetValueToWriter(MessageWriter* writer); |
-extern template class Property<int32>; |
- |
-template <> Property<uint32>::Property(); |
-template <> bool Property<uint32>::PopValueFromReader(MessageReader* reader); |
-template <> void Property<uint32>::AppendSetValueToWriter( |
- MessageWriter* writer); |
-extern template class Property<uint32>; |
- |
-template <> Property<int64>::Property(); |
-template <> bool Property<int64>::PopValueFromReader(MessageReader* reader); |
-template <> void Property<int64>::AppendSetValueToWriter(MessageWriter* writer); |
-extern template class Property<int64>; |
- |
-template <> Property<uint64>::Property(); |
-template <> bool Property<uint64>::PopValueFromReader(MessageReader* reader); |
-template <> void Property<uint64>::AppendSetValueToWriter( |
- MessageWriter* writer); |
-extern template class Property<uint64>; |
- |
-template <> Property<double>::Property(); |
-template <> bool Property<double>::PopValueFromReader(MessageReader* reader); |
-template <> void Property<double>::AppendSetValueToWriter( |
- MessageWriter* writer); |
-extern template class Property<double>; |
- |
-template <> bool Property<std::string>::PopValueFromReader( |
- MessageReader* reader); |
-template <> void Property<std::string>::AppendSetValueToWriter( |
- MessageWriter* writer); |
-extern template class Property<std::string>; |
- |
-template <> bool Property<ObjectPath>::PopValueFromReader( |
- MessageReader* reader); |
-template <> void Property<ObjectPath>::AppendSetValueToWriter( |
- MessageWriter* writer); |
-extern template class Property<ObjectPath>; |
- |
-template <> bool Property<std::vector<std::string> >::PopValueFromReader( |
- MessageReader* reader); |
-template <> void Property<std::vector<std::string> >::AppendSetValueToWriter( |
- MessageWriter* writer); |
-extern template class Property<std::vector<std::string> >; |
- |
-template <> bool Property<std::vector<ObjectPath> >::PopValueFromReader( |
- MessageReader* reader); |
-template <> void Property<std::vector<ObjectPath> >::AppendSetValueToWriter( |
- MessageWriter* writer); |
-extern template class Property<std::vector<ObjectPath> >; |
- |
-template <> bool Property<std::vector<uint8> >::PopValueFromReader( |
- MessageReader* reader); |
-template <> void Property<std::vector<uint8> >::AppendSetValueToWriter( |
- MessageWriter* writer); |
-extern template class Property<std::vector<uint8> >; |
- |
-template <> |
-bool Property<std::map<std::string, std::string>>::PopValueFromReader( |
+// Clang and GCC don't agree on how attributes should work for explicitly |
+// instantiated templates. GCC ignores attributes on explicit instantiations |
+// (and emits a warning) while Clang requires the visiblity attribute on the |
+// explicit instantiations for them to be visible to other compilation units. |
+// Hopefully clang and GCC agree one day, and this can be cleaned up: |
+// https://llvm.org/bugs/show_bug.cgi?id=24815 |
+#pragma GCC diagnostic push |
+#pragma GCC diagnostic ignored "-Wattributes" |
+ |
+template <> |
+CHROME_DBUS_EXPORT Property<uint8>::Property(); |
+template <> |
+CHROME_DBUS_EXPORT bool Property<uint8>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<uint8>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<uint8>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT Property<bool>::Property(); |
+template <> |
+CHROME_DBUS_EXPORT bool Property<bool>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<bool>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<bool>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT Property<int16>::Property(); |
+template <> |
+CHROME_DBUS_EXPORT bool Property<int16>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<int16>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<int16>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT Property<uint16>::Property(); |
+template <> |
+CHROME_DBUS_EXPORT bool Property<uint16>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<uint16>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<uint16>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT Property<int32>::Property(); |
+template <> |
+CHROME_DBUS_EXPORT bool Property<int32>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<int32>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<int32>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT Property<uint32>::Property(); |
+template <> |
+CHROME_DBUS_EXPORT bool Property<uint32>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<uint32>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<uint32>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT Property<int64>::Property(); |
+template <> |
+CHROME_DBUS_EXPORT bool Property<int64>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<int64>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<int64>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT Property<uint64>::Property(); |
+template <> |
+CHROME_DBUS_EXPORT bool Property<uint64>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<uint64>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<uint64>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT Property<double>::Property(); |
+template <> |
+CHROME_DBUS_EXPORT bool Property<double>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<double>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<double>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT bool Property<std::string>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<std::string>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<std::string>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT bool Property<ObjectPath>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<ObjectPath>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<ObjectPath>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT bool Property<std::vector<std::string>>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property< |
+ std::vector<std::string>>::AppendSetValueToWriter(MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<std::vector<std::string>>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT bool Property<std::vector<ObjectPath>>::PopValueFromReader( |
MessageReader* reader); |
template <> |
-void Property<std::map<std::string, std::string>>::AppendSetValueToWriter( |
+CHROME_DBUS_EXPORT void Property< |
+ std::vector<ObjectPath>>::AppendSetValueToWriter(MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<std::vector<ObjectPath>>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT bool Property<std::vector<uint8>>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void Property<std::vector<uint8>>::AppendSetValueToWriter( |
+ MessageWriter* writer); |
+extern template class CHROME_DBUS_EXPORT Property<std::vector<uint8>>; |
+ |
+template <> |
+CHROME_DBUS_EXPORT bool |
+Property<std::map<std::string, std::string>>::PopValueFromReader( |
+ MessageReader* reader); |
+template <> |
+CHROME_DBUS_EXPORT void |
+Property<std::map<std::string, std::string>>::AppendSetValueToWriter( |
MessageWriter* writer); |
-extern template class Property<std::map<std::string, std::string>>; |
+extern template class CHROME_DBUS_EXPORT |
+ Property<std::map<std::string, std::string>>; |
template <> |
-bool Property<std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>:: |
+CHROME_DBUS_EXPORT bool |
+Property<std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>:: |
PopValueFromReader(MessageReader* reader); |
template <> |
-void Property<std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>:: |
+CHROME_DBUS_EXPORT void |
+Property<std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>:: |
AppendSetValueToWriter(MessageWriter* writer); |
-extern template class Property< |
- std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>; |
+extern template class CHROME_DBUS_EXPORT |
+ Property<std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>; |
+ |
+#pragma GCC diagnostic pop |
} // namespace dbus |