[glibmm] ustring.h: Add Specialization for Stringify<const char[N]>



commit 169cce1e7477041435db7dbb8d92685214ec8f79
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Fri Sep 19 13:53:50 2014 +0800

    ustring.h: Add Specialization for Stringify<const char[N]>
    
    This adds a specialization for string literals in the form of const char[N]
    as some compilers would take such things to have ambiguous constructor
    overloads, such as Visual Studio, which take string literals in this form.
    
        * glib/glibmm/ustring.h: Add a specialization for Stringify for
          const char[N] so that ambiguous constructor overloads can be
          avoided for string literals in this form.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=736778

 glib/glibmm/ustring.h |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)
---
diff --git a/glib/glibmm/ustring.h b/glib/glibmm/ustring.h
index 6e09ecd..69b6733 100644
--- a/glib/glibmm/ustring.h
+++ b/glib/glibmm/ustring.h
@@ -1326,6 +1326,24 @@ public:
   inline const ustring* ptr() const { return &string_; }
 };
 
+/** A template specialization for Stringify<const char[N]> (for string literals),
+ * because the regular template has ambiguous constructor overloads for char*.
+ */
+template <std::size_t N>
+class ustring::Stringify<const char[N]>
+{
+private:
+  const ustring string_;
+
+  // noncopyable
+  Stringify(const ustring::Stringify<const char[N]>&);
+  Stringify<ustring>& operator=(const ustring::Stringify<const char[N]>&);
+
+public:
+  explicit inline Stringify(const char arg[N]) : string_(arg) {}
+  inline const ustring* ptr() const { return &string_; }
+};
+
 template <class T1>
 inline // static
 ustring ustring::compose(const ustring& fmt)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]