Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C++ > Re: constant-ex...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 2 of 4 Topic 45827 of 48020
Post > Topic >>

Re: constant-expression

by "Victor Bazarov" <v.Abazarov@[EMAIL PROTECTED] > May 9, 2008 at 11:43 AM

Dan Smithers wrote:
> What constitutes a constant-expression? I know that it is something
> that can be determined at compile time.
>
> I am trying to use template code and keep getting compiler errors
> "error: cannot appear in a constant-expression"
>
> template <int s>
> class CFoo
> {
> private:
>  int m_val[s];
> };
>
> struct SParams
> {
>  const int m_sz;
>  SParams(int sz) : m_sz(sz) {;}
> };
>
> int main(int argc, char *argv[])
> {
>  CFoo<2> foo;
>
>  const int sz(2);
>  CFoo<sz> foo2;
>
>  int sz2(3);
>  CFoo<sz2> foo3;
>
>  const SParams params(4);
>  CFoo<params.m_sz> foo4;
> }
>
> When I compile this code I get the following output.
>
> dwhs1@[EMAIL PROTECTED]
 g++ -o template template.cpp
> template.cpp:22: error: 'sz2' cannot appear in a constant-expression
> template.cpp:22: error: template argument 1 is invalid
> template.cpp:22: error: invalid type in declaration before ';' token
> template.cpp: In function 'int main(int, char**)':
> template.cpp:25: error: 'params' cannot appear in a
> constant-expression template.cpp:25: error: `.' cannot appear in a
> constant-expression template.cpp:25: error: template argument 1 is
> invalid
> template.cpp:25: error: invalid type in declaration before ';' token
>
> I understand that in line 22 I am using a local variable that is not
> const, but on line 25 there is a const member of a const structure.
>
> What's going on here?

I think a function call (and you have a constructor defined in your
'SParams' struct) interferes with the "const-ness" of 'params' object.
Since the initialisation requires a constructor call (never mind that
it actually can be optimized), the object is considered initialised at
run-time, and therefore cannot be part of the compile-time const expr.

That's my take on it, I didn't actually verify with the Standard.

V
-- 
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
 




 4 Posts in Topic:
constant-expression
Dan Smithers <dsmither  2008-05-09 16:28:05 
Re: constant-expression
"Victor Bazarov"  2008-05-09 11:43:36 
Re: constant-expression
terminator <farid.mehr  2008-05-09 21:57:41 
Re: constant-expression
James Kanze <james.kan  2008-05-10 08:06:56 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Tue Oct 14 8:57:19 CDT 2008.