Discussions
Categories
- 385.5K All Categories
- 5.1K Data
- 2.5K Big Data Appliance
- 2.5K Data Science
- 453.4K Databases
- 223.2K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 47 Multilingual Engine
- 606 MySQL Community Space
- 486 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3.2K ORDS, SODA & JSON in the Database
- 585 SQLcl
- 4K SQL Developer Data Modeler
- 188K SQL & PL/SQL
- 21.5K SQL Developer
- 46 Data Integration
- 46 GoldenGate
- 298.4K Development
- 4 Application Development
- 20 Developer Projects
- 166 Programming Languages
- 295K Development Tools
- 150 DevOps
- 3.1K QA/Testing
- 646.7K Java
- 37 Java Learning Subscription
- 37.1K Database Connectivity
- 201 Java Community Process
- 108 Java 25
- 22.2K Java APIs
- 138.3K Java Development Tools
- 165.4K Java EE (Java Enterprise Edition)
- 22 Java Essentials
- 176 Java 8 Questions
- 86K Java Programming
- 82 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 208 Java User Groups
- 25 JavaScript - Nashorn
- Programs
- 667 LiveLabs
- 41 Workshops
- 10.3K Software
- 6.7K Berkeley DB Family
- 3.6K JHeadstart
- 6K Other Languages
- 2.3K Chinese
- 207 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 474 Portuguese
Undefined symbol using static constexpr

The following code using static constexp on a class results in and undefined symbol the on the 12.5 linker but links fine in GCC, Clang and Visual C++.
test.h:
class Test { public: static constexpr auto CONST_VALUE = "const value"; static constexpr auto CONST_OTHER = "const other";};
test.cpp:
#include <iostream>#include "test.h"int main() { std::cout << Test::CONST_VALUE;}
When compiled:
$ CC -std=c++11 test.cpp -o testUndefined first referenced symbol in fileTest::CONST_VALUE test.o[Hint: static member Test::CONST_VALUE must be defined in the program]
Notice no compiler error is given when processing the header and that only for the variable being accessed in the cpp file gives an error at link time.
-Jake
Best Answer
-
Thanks for reporting this bug. It did not show up in our testing. I have filed bug 26266705 for the problem.
As a workaround, you can add a definition outside the class of the static data member. Unfortunately, you can't use "auto" in the definition because you can't repeat the initializer.
constexpr const char* Test::CONST_VALUE ;
It is now too late to fix this bug for the Studio 12.6 release. If you have a service contract for Studio, please go through your support channel and say that you want to escalate this bug for a fix in a patch.
Answers
-
Thanks for reporting this bug. It did not show up in our testing. I have filed bug 26266705 for the problem.
As a workaround, you can add a definition outside the class of the static data member. Unfortunately, you can't use "auto" in the definition because you can't repeat the initializer.
constexpr const char* Test::CONST_VALUE ;
It is now too late to fix this bug for the Studio 12.6 release. If you have a service contract for Studio, please go through your support channel and say that you want to escalate this bug for a fix in a patch.
-
BTW, the problem is not generic. If Test::CONST_VALUE has, for example, a numeric type, the code works. Array types and pointer types exhibit this bug.
-
Thanks!
The suggested workaround compiles on all the other compilers as well so we are good for now.
If you can say, will it be corrected in the followup release to 12.6 (12.7 or whatever)?
-
Many external and internal factors affect the priority of a bug fix. Unless a bug is escalated, it is generally impossible to say when a fix will become available.