[cfe-dev] Possible bug with decltype and access modifer order

David Irvine david.irvine at maidsafe.net
Mon Jan 14 13:01:45 PST 2013


Please see this stackoverflow question for an overview.
http://stackoverflow.com/questions/14188535/clang-access-modifier-order-and-decltype

The issue seems to be that the private members are not visible at
compilation to the decltype call. This is a minimum example (from the
question).  (I am the questioner in this case). This also seems to appear
as a 'bug' in gcc but not msvc (12). I am not
100% convinced but cannot find in the standard why this will not work. I
hope this helps.

#include <future>#include <iostream>#include <thread>#include <vector>
template <class T> T &self(T &t) { return t;  }template<typename T>
struct Dependent {  };
template<typename T>class Synchronised : Dependent<T>{
 public:
  explicit Synchronised(T t = T()) : t_(t) {}
  template<typename Functor>
  auto operator()(Functor functor) const ->decltype(functor(self(*this).t_)) {
  //auto operator()(Functor functor) const ->decltype(functor(this->t_)) {
    std::lock_guard<std::mutex> lock(mutex_);
    return functor(t_);
  }
 private:
  mutable T t_;
  mutable std::mutex mutex_;};

int main() {

    Synchronised<std::string> sync_string("Start\n");
    std::vector<std::future<void>> futures;}


Best Regards
David Irvine


 <http://maidsafe.net>maidsafe.net Limited is a limited liability company
incorporated in Scotland with number SC297540. VAT Registered 889 0608 77.
Registered Office: 72 Templehill, Troon, KA10 6BE.
Telephone Scotland: +44 1292 750020.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130114/23db09d3/attachment.html>


More information about the cfe-dev mailing list