On 10/26/2012 02:22 PM, Peter Sommerfeld wrote:
To learn about shared attribute I've copied nearly verbatim an
example from Andreis book. The code:
import core.atomic;
struct Data{
int value;
}
shared struct SharedStack(T) {
private shared struct Node{
T data;
Node* next;
this(T value){data = value;};
}
private Node* root;
// push
void push(T value){
auto n = new Node(value);
shared(Node)* oldRoot;
do {
oldRoot = root;
n.next = oldRoot;
} while(!cas(&root,oldRoot,n)); // line 30
}
// ...
}
SharedStack!(Data) q;
void main(string[] args){
Data m;
q.push(m); // line 40
}
I got the following error (dmd 2.060 win):
(40) Error function main.SharedStack!(Data).SharedStack.push(Data value)
shared is not callable using argument types (Data)
(30) template core.atomic.cas does not match any function template
declaration
What is wrong here ?
Peter
The following two changes are the workaround at least for compilation:
auto n = cast(shared)new Node(value);
// ...
shared SharedStack!(Data) q;
Ali