Summary: This diff translates C++ pointer-to-member expressions [5.5] to pointer arithmetic. Reviewed By: mbouaziz Differential Revision: D6132554 fbshipit-source-id: 9b77a4cmaster
parent
df0491272c
commit
c1e742536d
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (c) 2017 - present Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
struct item {
|
||||
int data;
|
||||
item* next;
|
||||
};
|
||||
|
||||
template <typename E>
|
||||
struct List {
|
||||
List(E* E::*next_ptr) : head(nullptr), next_ptr(next_ptr) {}
|
||||
|
||||
void add(E* e) {
|
||||
e->*next_ptr = head;
|
||||
head = e;
|
||||
}
|
||||
|
||||
void add_byref(E& e) {
|
||||
e.*next_ptr = head;
|
||||
head = &e;
|
||||
}
|
||||
|
||||
E* head;
|
||||
E* E::*next_ptr;
|
||||
};
|
||||
|
||||
int main() {
|
||||
List<item> l(&item::next);
|
||||
|
||||
item i;
|
||||
l.add(&i);
|
||||
l.add_byref(i);
|
||||
}
|
Loading…
Reference in new issue