Fix build issues due to access declarations: https://crbug.com/806958
  ISO C++11 does not allow access declarations; use using declarations instead.

The link to "Bug Tracker" on http://openjade.sourceforge.net/bugs.html
is not working. Sent a mail containing bug report to the Openjade-devel@
address on that page.

Patch by Rahul Chaudhry <rahulchaudhry@chromium.org>

--- a/include/IList.h
+++ b/include/IList.h
@@ -26,8 +26,8 @@ public:
   void swap(IList<T> &list) { IListBase::swap(list); }
   T *head() const { return (T *)IListBase::head(); }
   T *get() { return (T *)IListBase::get(); }
-  IListBase::clear;
-  IListBase::empty;
+  using IListBase::clear;
+  using IListBase::empty;
 friend class IListIter<T>;
 private:
   IList(const IList<T> &);	// undefined
--- a/include/IListIter.h
+++ b/include/IListIter.h
@@ -17,8 +17,8 @@ public:
   IListIter(const IList<T> &list) : IListIterBase(list) { }
   T *cur() const { return (T *)IListIterBase::cur(); }
   
-  IListIterBase::next;
-  IListIterBase::done;
+  using IListIterBase::next;
+  using IListIterBase::done;
 };
 
 #ifdef SP_NAMESPACE
--- a/include/Ptr.h
+++ b/include/Ptr.h
@@ -69,8 +69,8 @@ public:
   const T *operator->() const { return Ptr<T>::pointer(); }
   const T &operator*() const { return *Ptr<T>::pointer(); }
   void swap(ConstPtr<T> &p) { Ptr<T>::swap(p); }
-  Ptr<T>::isNull;
-  Ptr<T>::clear;
+  using Ptr<T>::isNull;
+  using Ptr<T>::clear;
   Boolean operator==(const Ptr<T> &p) const { return Ptr<T>::operator==(p); }
   Boolean operator!=(const Ptr<T> &p) const { return Ptr<T>::operator!=(p); }
   Boolean operator==(const ConstPtr<T> &p) const {
--- a/lib/Parser.h
+++ b/lib/Parser.h
@@ -62,16 +62,16 @@ public:
   Parser(const SgmlParser::Params &);
   Event *nextEvent();
   void parseAll(EventHandler &, const volatile sig_atomic_t *cancelPtr);
-  ParserState::sdPointer;
-  ParserState::instanceSyntaxPointer;
-  ParserState::prologSyntaxPointer;
-  ParserState::activateLinkType;
-  ParserState::allLinkTypesActivated;
-  ParserState::entityManager;
-  ParserState::entityCatalog;
-  ParserState::baseDtd;
-  ParserState::options;
-  ParserState::instantiateDtd;
+  using ParserState::sdPointer;
+  using ParserState::instanceSyntaxPointer;
+  using ParserState::prologSyntaxPointer;
+  using ParserState::activateLinkType;
+  using ParserState::allLinkTypesActivated;
+  using ParserState::entityManager;
+  using ParserState::entityCatalog;
+  using ParserState::baseDtd;
+  using ParserState::options;
+  using ParserState::instantiateDtd;
   friend class PiAttspecParser;
 private:
   Parser(const Parser &);	// undefined
