Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.

intel c++ 11.1.072 and gcc 4.5.0

Alin_M_Elena
Beginner
1,947 Views
I installed the intel c/c++ compilers on opensuse 11.3 m7updated to current factory...

unfortunately I got into this nasty bug

alin@felix:~> icpc -o a bug.cpp 
/usr/include/c++/4.5/iomanip(64): error: expected an expression
    { return { __mask }; }
             ^

/usr/include/c++/4.5/iomanip(94): error: expected an expression
    { return { __mask }; }
             ^

/usr/include/c++/4.5/iomanip(125): error: expected an expression
    { return { __base }; }
             ^

/usr/include/c++/4.5/iomanip(193): error: expected an expression
    { return { __n }; }
             ^

/usr/include/c++/4.5/iomanip(223): error: expected an expression
    { return { __n }; }
             ^

compilation aborted for bug.cpp (code 2)
here are the versions

alin@felix:~> icpc --version
icpc (ICC) 11.1 20100414
Copyright (C) 1985-2010 Intel Corporation.  All rights reserved.

alin@felix:~> g++ --version
g++ (SUSE Linux) 4.5.0 20100521 [gcc-4_5-branch revision 159657]
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Alin
Please find the bug.cpp in theattachment.
0 Kudos
38 Replies
stevenpclark
Beginner
601 Views
RDA-
Thanks for the suggestion. Unfortunately, (with 11.1 at least) adding that flag just results in a DIFFERENT compilation error:

BEFORE:
/usr/include/c++/4.5.1/iomanip(64): error: expected an expression
{ return { __mask }; }
^

/usr/include/c++/4.5.1/iomanip(94): error: expected an expression
{ return { __mask }; }
^

/usr/include/c++/4.5.1/iomanip(125): error: expected an expression
{ return { __base }; }
^

/usr/include/c++/4.5.1/iomanip(193): error: expected an expression
{ return { __n }; }
^

/usr/include/c++/4.5.1/iomanip(223): error: expected an expression
{ return { __n }; }



AFTER:
/usr/include/c++/4.5.1/bits/stringfwd.h(74): error: identifier "char16_t" is undefined
template<> struct char_traits;
^

/usr/include/c++/4.5.1/bits/stringfwd.h(75): error: identifier "char32_t" is undefined
template<> struct char_traits;
^
[....many more similar errors....]

/usr/include/c++/4.5.1/type_traits(106): error: expected a ">"
struct remove_reference<_Tp&&>
^

/usr/include/c++/4.5.1/type_traits(136): catastrophic error: rvalue references not yet implemented
{ typedef _Tp&& type; };
^

compilation aborted for test.cc (code 4)


Do I need to bump back up to 12.0 for that compiler flag to work?

Thanks
-Steven
0 Kudos
TimP
Honored Contributor III
601 Views
I did check that the case is accepted by icpc 12.0 under -std=c++0x
That option is better implemented in 12.0.
0 Kudos
dacrim
Beginner
601 Views
Will 12.0 be available anytime soon? The new naming on the web site doesn't make it clear what version is available now. However, section 3.6.4 "TR1 System Headers" seems to imply that the current release is still an 11.X version which does not fix this issue.

Is it possible to get a beta version of 12.0?
0 Kudos
TimP
Honored Contributor III
601 Views
xe 2011 is the marketing name for the 12.0 compilers. The beta licenses have expired; if you are still within the active term of your license, you can download the new compiler.
0 Kudos
Johnny_W_
Beginner
601 Views
With version 12.0.2 20110112 compiling with -std=c++0x still gives the same problem, but the workaround to use CPPFLAGS += -std=c++0x still works.

0 Kudos
Michael_Fox
Beginner
601 Views
I am evaluating icc version 12.0.2, and this problem persists on openSUSE 11.3 (x86_64)
VERSION = 11.3.

Is there a fix, or sould one use a old iomanip.h file localy?

usr/include/c++/4.5/iomanip(64): error: expected an expression
{ return { __mask }; }
^

/usr/include/c++/4.5/iomanip(94): error: expected an expression
{ return { __mask }; }
^

/usr/include/c++/4.5/iomanip(125): error: expected an expression
{ return { __base }; }
^

/usr/include/c++/4.5/iomanip(193): error: expected an expression
{ return { __n }; }
^

/usr/include/c++/4.5/iomanip(223): error: expected an expression
{ return { __n }; }

Thanks!
0 Kudos
ascotilla
Beginner
601 Views
Thanks a lot, rda, That worked perfectly for me!!
0 Kudos
ascotilla
Beginner
601 Views
By the way, do you know how can I include the -std=c+0x flag in a makefile? I've tried "CXXFLAGS = -std=c++0x", but it doesn't work..

Thanks in advance
0 Kudos
TimP
Honored Contributor III
601 Views
That would be a normal way, if $(CXXFLAGS) is included explicitly in the rules for making .o files from C++ sources. If the Makefile uses ($CXXFLAGS), you would be adding the option to those already set. This surely depends on how the Makefile is set up.
If you wish the flag to be always set for icpc, you can include it in icpc.cfg in your compiler installation.
0 Kudos
ascotilla
Beginner
601 Views
Thank you TimP. I'm sorry because I'm a newbie and still don't know very well how to do it. I wrote this in the makefile:


CPPOPTIONS = -I$(NETCDF)/include
CXX = icpc
CXXOPTIONS = -o3
CXXFLAGS = -std=c++0x
DEBUG =-g -D DEBUG

$(CXX):$(CXXFLAGS)$(CXXOPTIONS)$(DEBUG)-c $*.cpp
$(MAKE)$(MAKEFILE)DEBUG="-g -D DEBUG"

and I got this error:

make: *** No rule to make target `-std=c++0x-o3', needed by `icpc'. Stop.

So, as you said, I need to specify it somewhat in the rules...


0 Kudos
TimP
Honored Contributor III
601 Views
Quoting ascotilla
Thank you TimP. I'm sorry because I'm a newbie and still don't know very well how to do it. I wrote this in the makefile:


CPPOPTIONS = -I$(NETCDF)/include
CXX = icpc
CXXOPTIONS = -o3
CXXFLAGS = -std=c++0x
DEBUG =-g -D DEBUG

$(CXX):$(CXXFLAGS)$(CXXOPTIONS)$(DEBUG)-c $*.cpp
$(MAKE)$(MAKEFILE)DEBUG="-g -D DEBUG"

and I got this error:

make: *** No rule to make target `-std=c++0x-o3', needed by `icpc'. Stop.

So, as you said, I need to specify it somewhat in the rules...


Your makefile sets the first task to be the building of icpc; as intermediate steps, you asked to build files named the same as your options. That can't be what you intended.
Please start with simple examples, e.g. from the manual

If you want to have all compilations of .cpp files which you don't take care of specifically use CXXFLAGS, you would have a rule at the bottom like

.cpp.o:
$(CXX) $(CXXFLAGS) -c $*.cpp

That rule should exist by default as an implicit rule.

If you're using netcdf, you must be able to get a working example to start from.
0 Kudos
ascotilla
Beginner
601 Views
Thanks TimP, I tried to adapt what I found in other forums to my case, but it will definitely better to start from the beginning (I don't have so much time so I was trying to avoid that, as I'm not suposed to modify the makefile, but it's the only way I found to avoid the bug.

Cheers
0 Kudos
TimP
Honored Contributor III
601 Views
You can over-ride makefile variables at invocation, e.g.
make CXX=icpc CXXFLAGS='-fp-model source -std=c++0x'
should you choose to do so, but perhaps you should use icpc.cfg
0 Kudos
ascotilla
Beginner
601 Views
Unfortunately that didn't work, so I'll try with the icpc.cfg

Thank you!!
0 Kudos
ascotilla
Beginner
601 Views
I finally could do it with the help of a friend.. It was quite silly, as the first thing I tried was to add the flag -std=c++0x to the CXXOPTIONS, but I had two (one general, and another for the options, I think)...and I just had tried the general. Adding the flag to the other CXXOPTIONS it worked perfectly... Newbie's stupid mistakes...

Thanks a lot!

0 Kudos
Lingfeng_C_Intel
Employee
601 Views

We found this issue can reproduce with the latest version and gcc 4.5.1 on Fedora 14.

0 Kudos
Lingfeng_C_Intel
Employee
601 Views
I found our new version fixed this issue now.
Could you double check it?

Thanks,
Wise
0 Kudos
Jason_Patton
Beginner
601 Views
Wise, I think I can validate that the newest version is working. I was having this problem when compiling openmpi 1.4.3 on F14 (I think it was with 11.1, though), updated to 2011.4.191, and openmpi compiled fine.
0 Kudos
Reply