diff --git a/Control/AthenaKernel/AthenaKernel/DataBucket.icc b/Control/AthenaKernel/AthenaKernel/DataBucket.icc index 5c6b33972b86ce8b1068ec4f3144d64dd698a07a..8c67051d2897b7ea5c89af95b0603c4d04d0ac96 100755 --- a/Control/AthenaKernel/AthenaKernel/DataBucket.icc +++ b/Control/AthenaKernel/AthenaKernel/DataBucket.icc @@ -55,7 +55,7 @@ void db_free_ptr (T* ptr, std::true_type) /////////////////////////////////////////////////////////////////////////////// // CONSTRUCTORS /////////////////////////////////////////////////////////////////////////////// -template <typename T> +template <typename T> SG::DataBucket<T>::DataBucket(T* data) : m_ptr(data) { @@ -77,7 +77,7 @@ SG::DataBucket<T>::DataBucket(std::unique_ptr<U> data) { } -template <typename T> +template <typename T> SG::DataBucket<T>::DataBucket(SG::DataObjectSharedPtr<T> data) : m_ptr(data.detach()) { @@ -86,11 +86,11 @@ SG::DataBucket<T>::DataBucket(SG::DataObjectSharedPtr<T> data) /////////////////////////////////////////////////////////////////////////////// // DATAOBJECT /////////////////////////////////////////////////////////////////////////////// -template <typename T> -const CLID& SG::DataBucket<T>::clID() const {return classID();} +template <typename T> +const CLID& SG::DataBucket<T>::clID() const {return classID();} -template <typename T> -const CLID& SG::DataBucket<T>::classID() { +template <typename T> +const CLID& SG::DataBucket<T>::classID() { typedef typename std::remove_pointer<T>::type BareTp; typedef typename std::remove_const<BareTp>::type BareT; return ClassID_traits<BareT>::ID(); @@ -105,7 +105,7 @@ const CLID& SG::DataBucket<T>::classID() { * @param irt To be called if we make a new instance. * @param isConst True if the object being converted is regarded as const. */ -template <typename T> +template <typename T> void* SG::DataBucket<T>::cast (CLID clid, IRegisterTransient* irt /*= 0*/, @@ -150,7 +150,7 @@ SG::DataBucket<T>::cast (CLID clid, * @param irt To be called if we make a new instance. * @param isConst True if the object being converted is regarded as const. */ -template <typename T> +template <typename T> void* SG::DataBucket<T>::cast (const std::type_info& tinfo, IRegisterTransient* irt /*= 0*/, bool isConst /*= true*/) @@ -182,8 +182,13 @@ void* SG::DataBucket<T>::cast (const std::type_info& tinfo, return 0; } -template <typename T> -SG::DataBucket<T>::~DataBucket() +// The DataBucket descructor is put into an explicit namespace scope to get rid +// of a pesky warning from DPC++. Unfortunately Clang has an issue with the +// class name having a scope declaration on the destructor for some reason. +namespace SG { + +template <typename T> +DataBucket<T>::~DataBucket() { // Delete any copies. vec_t::iterator end = m_cnvcopies.end(); @@ -198,6 +203,8 @@ SG::DataBucket<T>::~DataBucket() SG::db_free_ptr(m_ptr, tag()); } +} // namespace SG + namespace { @@ -228,4 +235,3 @@ void SG::DataBucket<T>::lock() { call_lock (m_ptr, typename std::is_polymorphic<T>::type()); } - diff --git a/Control/CxxUtils/CxxUtils/features.h b/Control/CxxUtils/CxxUtils/features.h index dcd5c1b86a22810e1ecec4a51084331c95c67e9f..25369243eb64753169385d366114b33592409142 100644 --- a/Control/CxxUtils/CxxUtils/features.h +++ b/Control/CxxUtils/CxxUtils/features.h @@ -17,7 +17,8 @@ /// Do we have function multiversioning? GCC and clang > 7 support /// the target attribute #if defined(__ELF__) && defined(__GNUC__) && !defined(__CLING__) && \ - !defined(__ICC) && !defined(__COVERITY__) && !defined(__CUDACC__) + !defined(__ICC) && !defined(__COVERITY__) && !defined(__CUDACC__) && \ + !defined(CL_SYCL_LANGUAGE_VERSION) # define HAVE_FUNCTION_MULTIVERSIONING 1 #else # define HAVE_FUNCTION_MULTIVERSIONING 0