4

I would like to know if the following is allowed:

template < class C >
void function(C&);

void function() {
  class {} local;
  function(local);
}

thanks

2 Answers 2

6

It's not allowed right now. But it's supported in C++0x. The current Standard says at 14.3.1/2

A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.

That said, if the function is also local, there's no problem

void f() {
  class L {} local;
  struct C {
    static void function(L &l) {
      // ...
    }
  };
  C::function(local);
}
Sign up to request clarification or add additional context in comments.

3 Comments

bummers. Is there clean alternative for named tuples (which is what been trying to do)?
Ah. I think local function will do it for me. Thanks
You mean class { int a; int b; } x; function(x); ? Not possible: the type of x is local. You have to go your way with pair, or make x's class not local (the variable x can still be local). Put the class into an unnamed namespace for example. I usually consider functions inside local classes like this a bit hacky :) But i'm glad i could be of help.
0

It's allowed if you use polymorphism instead of templates. Or if you don't need to extend the interface seen by function, simple inheritance will do.

void function( ABC & );

void function() {
  class special : public ABC {
      virtual void moof() {}
  } local;
  function(local);
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.