- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
icpc 13.0 had trouble with compiling gcc 4.7.0 header "complex" when using "-std=c++0x" (see http://software.intel.com/en-us/forums/topic/326830), so we installed icpc (ICC) 13.0.1 20121010. However, the following simple code attached fails to compile (regardless of whether I use -std=c++0x or not) with the error message
test.cc(5): error: namespace "std" has no member "complex"
Is there any workaround or cannot I simple not use std::complex<> with Intel?
Link Copied
7 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
This works fine for me with or the without -std=c++0x option. Can you preprocess the file (use the -E option) and attach the resultant test.i file?
In other words do:
icpc -c -E test.cpp >test.i
this should result in a test.i file which shows what files are being included.
thanks
Judy
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Looks like the first header file that's being found is in /cm/shared/apps/ics/include/complex.
That then includes a file in /cm/shared/apps/ics/composer_xe_2013.1.117/compiler/include/complex. None of these actually have
any code after preprocessing in them. What does the header file /cm/shared/ics/include/complex look like? Is it an Intel supplied header?
I think your search path is wrong and that the first header that should get included is /cm/shared/apps/ics/composer_xe_2013.1.117/compiler/include/complex.
Judy
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
#include_next looks for an include file with the same name (in this case ) on the next directory after the current one in the search path. So if your search path looks like -Iincludedir1 -Iincludedir2 ant includedir1/complex has an #include_next in it will include the complex header from includedir2. So what should be happening in the Intel version of should do some stuff and then include the GNU version.
Anyway I don't understand why you have two identical directories and why they are both being specified in your search path. The icpc driver should only be including the Intel substitute header directory that was actually installed with the most recent version of the compiler. Does /cm/shared/apps/ics/include contain headers from some old installation? Or did someone manually copy all the headers there?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Walter,
i have Your sample compiled with the Intel C/C++ Parallel Studio XE 2013 ( update 1 ) under openSUSE 12.2 Linux
no problems only following warning
-rw-r----- 1 root root 6722 Nov 17 18:29 complex.h
-rw-r----- 1 root root 117 Nov 16 14:43 test.cpp
linux-cuda:/local/test # icpc -std=c++0 test.cpp
icpc: command line warning #10159: invalid argument for option '-std'
linux-cuda:/local/test # ls -l
total 32
-rwxr-xr-x 1 root root 16873 Nov 18 05:56 a.out
-rw-r----- 1 root root 6722 Nov 17 18:29 complex.h
-rw-r----- 1 root root 117 Nov 16 14:43 test.cpp
linux-cuda:/local/test # ./a.out
Z=(1.2,2.3)
or recompile as follow:
linux-cuda:/local/test # ls -l
total 12
-rw-r----- 1 root root 6722 Nov 17 18:29 complex.h
-rw-r----- 1 root root 117 Nov 16 14:43 test.cpp
linux-cuda:/local/test # icpc -std=c++0 test.cpp
icpc: command line warning #10159: invalid argument for option '-std'
linux-cuda:/local/test # ls -l
total 32
-rwxr-xr-x 1 root root 16873 Nov 18 05:56 a.out
-rw-r----- 1 root root 6722 Nov 17 18:29 complex.h
-rw-r----- 1 root root 117 Nov 16 14:43 test.cpp
linux-cuda:/local/test # ./a.out
Z=(1.2,2.3)
linux-cuda:/local/test # icpc -std=c++0x test.cpp
linux-cuda:/local/test # ./a.out
Z=(1.2,2.3)
linux-cuda:/local/test #
linux-cuda:/local/test #
okay under linux no problems
regards
Franz
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Franz, you didn't use c++11 (by misspelling the option "-std=c++0x" as "-std=c++0", creating the warning), hence your test is irrelevant.
The problem has been resolved by now. Our system admin, who installed the compiler using the standard Intel installer (only changed the install directory from the default, but nothing else), unnecessarily added the the Intel include paths to the environment variables CPLUS_INCLUDE_PATH, so that #include_next included the same file again (like me, he wasn't aware of the #include_next directive).
thanks for you help!

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page