On 21-10-2016 15:09, Willem Jan Withagen wrote:
> Hi,
> 
> All this Ceph stuff finally used to compile under FreeBSD.
> And all testss completed correctly.
> 
> But somewhere in the Ceph-tree there was a lot of template and trait
> code added/replaced.
> Problem is that this compiles under GCC, but Clang throws an error. It
> looks like it cannot select types of automagic conversion.
> 
> But this template/trait stuff is too much for me to wrap my head around.
> I'm reading up a lot, but that does not yet get me anywhere.
> 
> So I was wondering if anybody with more C++ knowledge would like to
> assist and give some clues as to how to fix this.
> 
> The error report is at:
> 
> http://cephdev.digiware.nl:8180/jenkins/job/ceph-freebsd/39/consoleFull
> 
> And the ceph code can be found at:
> https://github.com/ceph/ceph

Oke, the preson responsable for the change helped to figure it out, and
it looks like the following diff helps

diff --git a/src/include/denc.h b/src/include/denc.h
index 59f7686..caa095b 100644
--- a/src/include/denc.h
+++ b/src/include/denc.h
@@ -722,7 +722,7 @@ struct denc_traits<
 template<typename T>
 struct denc_traits<
   std::vector<T>,
-  typename std::enable_if<denc_traits<T>::supported>::type> {
+  typename std::enable_if<denc_traits<T>::supported != 0>::type> {
   typedef denc_traits<T> traits;

   enum { supported = true };
@@ -831,7 +831,7 @@ struct denc_traits<
 template<typename T>
 struct denc_traits<
   std::set<T>,
-  typename std::enable_if<denc_traits<T>::supported>::type> {
+  typename std::enable_if<denc_traits<T>::supported != 0>::type> {
   typedef denc_traits<T> traits;

   enum { supported = true };

And the conclusion is that std::enable_if<> does not always like it when
the value is 'int'.
the definition of supported is:
struct denc_traits {
  enum { supported = 0 };
  enum { featured = false };
  enum { bounded = false };
};

and values can range 0..2.

So is this a GCC liberalization, or is Clang here to picky?

Thanx,
--WjW


_______________________________________________
freebsd-toolchain@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"

Reply via email to