#include <cstddef>
#include <utility>
#include <vector>
template < class T, class L = size_t >
class Foo{
public:
Foo(std::vector<L> , std::vector<std::vector<T> > );
private:
std::vector<L> shape_;
std::vector<std::vector<T> > cost_;
};
template < class T, class L >
Foo<T,L>::Foo( std::vector<L> shape, std::vector< std::vector< T > > ucosts )
:shape_(std::move(shape)), cost_(std::move(ucosts))
{
}
int main()
{
typedef double termType;
typedef Foo<termType, int> myFoo;
std::vector<int> ushape(10);
std::vector< std::vector< termType> > ucosts(2, std::vector<termType> ( 5, 0 )) ;
myFoo ff1(ushape, ucosts); // <------ DOES NOT WORK
Foo<termType, int> ff2(ushape, ucosts); // <------ DOES WORK
}
I2luY2x1ZGUgPGNzdGRkZWY+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGUgPCBjbGFzcyBULCBjbGFzcyBMID0gc2l6ZV90ID4KY2xhc3MgRm9vewogIHB1YmxpYzoKICAgICBGb28oc3RkOjp2ZWN0b3I8TD4gLCBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxUPiA+ICk7CiAgcHJpdmF0ZToKICAgICBzdGQ6OnZlY3RvcjxMPiBzaGFwZV87IAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPFQ+ID4gY29zdF87Cn07Cgp0ZW1wbGF0ZSA8IGNsYXNzIFQsIGNsYXNzIEwgPgpGb288VCxMPjo6Rm9vKCBzdGQ6OnZlY3RvcjxMPiBzaGFwZSwgc3RkOjp2ZWN0b3I8IHN0ZDo6dmVjdG9yPCBUID4gPiB1Y29zdHMgKQo6c2hhcGVfKHN0ZDo6bW92ZShzaGFwZSkpLCBjb3N0XyhzdGQ6Om1vdmUodWNvc3RzKSkKewoKfQoKaW50IG1haW4oKQp7CiAgICB0eXBlZGVmIGRvdWJsZSB0ZXJtVHlwZTsKICAgIHR5cGVkZWYgRm9vPHRlcm1UeXBlLCBpbnQ+IG15Rm9vOwogICAgc3RkOjp2ZWN0b3I8aW50PiB1c2hhcGUoMTApOwogICAgc3RkOjp2ZWN0b3I8IHN0ZDo6dmVjdG9yPCB0ZXJtVHlwZT4gPiB1Y29zdHMoMiwgc3RkOjp2ZWN0b3I8dGVybVR5cGU+ICggNSwgMCApKSA7CiAgICBteUZvbyBmZjEodXNoYXBlLCB1Y29zdHMpOyAvLyA8LS0tLS0tIERPRVMgTk9UIFdPUksKICAgIEZvbzx0ZXJtVHlwZSwgaW50PiBmZjIodXNoYXBlLCB1Y29zdHMpOyAvLyA8LS0tLS0tIERPRVMgV09SSwp9