[GiNaC-list] list of list

Sheplyakov Alexei varg at theor.jinr.ru
Sun Feb 4 09:29:33 CET 2007


On Sun, Feb 04, 2007 at 02:19:42AM +0800, Jerome BENOIT wrote:
> I have just noticed that:
> lst list;
> list = lst(lst(1,1),lst(2,4),lst(3,9));
> gives a list of list as expected,
> whereas
> lst list;
> list = lst(1,1),lst(2,4),lst(3,9);

Probably you want this:

list = ex(lst(1, 1)), lst(2, 4), lst(3,9);
> gives the first list (namely lst(1,1))

Not exactly, your code gives lst(1, 1) as opposed to lst(lst(1, 1)).

> is it a bug ?

No. This is how C++ function overload resolution works. There are several
overloaded instances of operator= in the lst class:

lst& operator=(const lst&);
container_init<ex, std::list> operator=(const ex&);

First one gives the best match (no type conversion form lst
to ex is necessary), so your code basically reads as:

class foo {
	int i;
	foo(int i_);
	foo& operator=(const foo& o);

void demo() {
	// lst list;
	foo a; 
	// list = lst(1, 1), lst(2, 4), lst(3, 9);
	a = foo(1), foo(2), foo(3);

foo::foo() { i = 0; }
foo::foo(int i_) { i = i_; }
foo& foo::operator=(const foo& o) {
	if (&o != this)
		i = o.i;
	return *this;

> or is it a wrong thing to do ? 

There is nothing wrong about list of lists. But the code operating on
such lists will be [probably] somewhat inefficient.

Best regards,

All science is either physics or stamp collecting.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: Digital signature
Url : http://www.cebix.net/pipermail/ginac-list/attachments/20070204/d12b048f/attachment.pgp

More information about the GiNaC-list mailing list